on master help sign in
[fix] Result text in Wolfram|Alpha (#607)
commit09ee2aa69dbd4815e0e1e1de53f3571972e04903 authormarc <a01200356@itesm.mx> dateWed 6 Jul 2016, 17:29 (10 years ago) parent390ad59
4 files changed+23−8
searx/engines/wolframalpha_api.py+8−2 searx/engines/wolframalpha_noapi.py+7−2 tests/unit/engines/test_wolframalpha_api.py+4−2 tests/unit/engines/test_wolframalpha_noapi.py+4−2
searx/engines/wolframalpha_api.py+8−2
@@ -22,6 +22,7 @@ answer_xpath = '//pod[attribute::primary="true"]/subpod/plaintext'
2222input_xpath = '//pod[starts-with(attribute::id, "Input")]/subpod/plaintext'
2323pods_xpath = '//pod'
2424subpods_xpath = './subpod'
25+pod_primary_xpath = './@primary'
2526pod_id_xpath = './@id'
2627pod_title_xpath = './@title'
2728plaintext_xpath = './plaintext'
@@ -78,10 +79,12 @@ def response(resp):
7879 infobox_title = None
7980
8081 pods = search_results.xpath(pods_xpath)
82+ result = ""
8183 result_chunks = []
8284 for pod in pods:
8385 pod_id = pod.xpath(pod_id_xpath)[0]
8486 pod_title = pod.xpath(pod_title_xpath)[0]
87+ pod_is_result = pod.xpath(pod_primary_xpath)
8588
8689 subpods = pod.xpath(subpods_xpath)
8790 if not subpods:
@@ -94,6 +97,9 @@ def response(resp):
9497
9598 if content and pod_id not in image_pods:
9699
100+ if pod_is_result:
101+ result = content
102+
97103 # if no input pod was found, title is first plaintext pod
98104 if not infobox_title:
99105 infobox_title = content
@@ -116,7 +122,7 @@ def response(resp):
116122
117123 # append link to site
118124 results.append({'url': resp.request.headers['Referer'].decode('utf8'),
119− 'title': 'Wolfram|Alpha',
120− 'content': infobox_title})
125+ 'title': infobox_title + ' - Wolfram|Alpha',
126+ 'content': result})
121127
122128 return results
searx/engines/wolframalpha_noapi.py+7−2
@@ -81,9 +81,11 @@ def response(resp):
8181 # TODO handle resp_json['queryresult']['assumptions']
8282 result_chunks = []
8383 infobox_title = None
84+ result = ""
8485 for pod in resp_json['queryresult']['pods']:
8586 pod_id = pod.get('id', '')
8687 pod_title = pod.get('title', '')
88+ pod_is_result = pod.get('primary', None)
8789
8890 if 'subpods' not in pod:
8991 continue
@@ -97,6 +99,9 @@ def response(resp):
9799 if subpod['plaintext'] != '(requires interactivity)':
98100 result_chunks.append({'label': pod_title, 'value': subpod['plaintext']})
99101
102+ if pod_is_result:
103+ result = subpod['plaintext']
104+
100105 elif 'img' in subpod:
101106 result_chunks.append({'label': pod_title, 'image': subpod['img']})
102107
@@ -108,7 +113,7 @@ def response(resp):
108113 'urls': [{'title': 'Wolfram|Alpha', 'url': resp.request.headers['Referer'].decode('utf8')}]})
109114
110115 results.append({'url': resp.request.headers['Referer'].decode('utf8'),
111− 'title': 'Wolfram|Alpha',
112− 'content': infobox_title})
116+ 'title': infobox_title + ' - Wolfram|Alpha',
117+ 'content': result})
113118
114119 return results
tests/unit/engines/test_wolframalpha_api.py+4−2
@@ -103,7 +103,8 @@ class TestWolframAlphaAPIEngine(SearxTestCase):
103103 self.assertEqual(referer_url, results[0]['urls'][0]['url'])
104104 self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
105105 self.assertEqual(referer_url, results[1]['url'])
106− self.assertEqual('Wolfram|Alpha', results[1]['title'])
106+ self.assertEqual('input_plaintext - Wolfram|Alpha', results[1]['title'])
107+ self.assertIn('result_plaintext', results[1]['content'])
107108
108109 # test calc
109110 xml = """<?xml version='1.0' encoding='UTF-8'?>
@@ -161,4 +162,5 @@ class TestWolframAlphaAPIEngine(SearxTestCase):
161162 self.assertEqual(referer_url, results[0]['urls'][0]['url'])
162163 self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
163164 self.assertEqual(referer_url, results[1]['url'])
164− self.assertEqual('Wolfram|Alpha', results[1]['title'])
165+ self.assertEqual('integral_plaintext - Wolfram|Alpha', results[1]['title'])
166+ self.assertIn('integral_plaintext', results[1]['content'])
tests/unit/engines/test_wolframalpha_noapi.py+4−2
@@ -140,7 +140,8 @@ class TestWolframAlphaNoAPIEngine(SearxTestCase):
140140 self.assertEqual(referer_url, results[0]['urls'][0]['url'])
141141 self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
142142 self.assertEqual(referer_url, results[1]['url'])
143− self.assertEqual('Wolfram|Alpha', results[1]['title'])
143+ self.assertEqual('input_plaintext - Wolfram|Alpha', results[1]['title'])
144+ self.assertIn('result_plaintext', results[1]['content'])
144145
145146 # test calc
146147 json = r"""
@@ -219,4 +220,5 @@ class TestWolframAlphaNoAPIEngine(SearxTestCase):
219220 self.assertEqual(referer_url, results[0]['urls'][0]['url'])
220221 self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
221222 self.assertEqual(referer_url, results[1]['url'])
222− self.assertEqual('Wolfram|Alpha', results[1]['title'])
223+ self.assertEqual('integral_plaintext - Wolfram|Alpha', results[1]['title'])
224+ self.assertIn('integral_plaintext', results[1]['content'])