forked from zaclys/searxng
		
	append link to result in wolframalpha_api (and the tests to validate that)
This commit is contained in:
		
							parent
							
								
									2a15944b58
								
							
						
					
					
						commit
						8ca5744814
					
				
					 3 changed files with 34 additions and 41 deletions
				
			
		|  | @ -10,15 +10,18 @@ | |||
| 
 | ||||
| from urllib import urlencode | ||||
| from lxml import etree | ||||
| from re import search | ||||
| 
 | ||||
| # search-url | ||||
| base_url = 'http://api.wolframalpha.com/v2/query' | ||||
| search_url = base_url + '?appid={api_key}&{query}&format=plaintext' | ||||
| site_url = 'http://www.wolframalpha.com/input/?{query}' | ||||
| api_key = ''  # defined in settings.yml | ||||
| 
 | ||||
| # xpath variables | ||||
| failure_xpath = '/queryresult[attribute::success="false"]' | ||||
| answer_xpath = '//pod[attribute::primary="true"]/subpod/plaintext' | ||||
| input_xpath = '//pod[starts-with(attribute::title, "Input")]/subpod/plaintext' | ||||
| 
 | ||||
| 
 | ||||
| # do search-request | ||||
|  | @ -60,6 +63,15 @@ def response(resp): | |||
| 
 | ||||
|             results.append({'answer': answer}) | ||||
| 
 | ||||
|     # TODO: append a result with title and link, like in the no api version | ||||
|     # if there's no input section in search_results, check if answer has the input embedded (before their "=" sign) | ||||
|     try: | ||||
|         query_input = search_results.xpath(input_xpath)[0].text | ||||
|     except IndexError: | ||||
|         query_input = search(u'([^\uf7d9]+)', answers[0].text).group(1) | ||||
| 
 | ||||
|     # append link to site | ||||
|     result_url = site_url.format(query=urlencode({'i': query_input.encode('utf-8')})) | ||||
|     results.append({'url': result_url, | ||||
|                     'title': query_input + " - Wolfram|Alpha"}) | ||||
| 
 | ||||
|     return results | ||||
|  |  | |||
|  | @ -305,7 +305,7 @@ engines: | |||
|     # You can use the engine using the official stable API, but you need an API key | ||||
|     # See : http://products.wolframalpha.com/api/ | ||||
|     #    engine : wolframalpha_api | ||||
|     #    api_key: '' # required! | ||||
|     #    api_key: 'apikey' # required! | ||||
|     engine : wolframalpha_noapi | ||||
|     timeout: 6.0 | ||||
|     disabled : True | ||||
|  |  | |||
|  | @ -124,8 +124,10 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|         response = mock.Mock(content=xml) | ||||
|         results = wolframalpha_api.response(response) | ||||
|         self.assertEqual(type(results), list) | ||||
|         self.assertEqual(len(results), 1) | ||||
|         self.assertEqual(len(results), 2) | ||||
|         self.assertIn('i', results[0]['answer']) | ||||
|         self.assertIn('sqrt(-1) - Wolfram|Alpha', results[1]['title']) | ||||
|         self.assertEquals('http://www.wolframalpha.com/input/?i=sqrt%28-1%29', results[1]['url']) | ||||
| 
 | ||||
|         xml = """<?xml version='1.0' encoding='UTF-8'?> | ||||
|             <queryresult success='true' | ||||
|  | @ -223,8 +225,10 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|         response = mock.Mock(content=xml) | ||||
|         results = wolframalpha_api.response(response) | ||||
|         self.assertEqual(type(results), list) | ||||
|         self.assertEqual(len(results), 1) | ||||
|         self.assertEqual(len(results), 2) | ||||
|         self.assertIn('log(x)+c', results[0]['answer']) | ||||
|         self.assertIn('∫1/xx - Wolfram|Alpha'.decode('utf-8'), results[1]['title']) | ||||
|         self.assertEquals('http://www.wolframalpha.com/input/?i=%E2%88%AB1%2Fx%EF%9D%8Cx', results[1]['url']) | ||||
| 
 | ||||
|         xml = """<?xml version='1.0' encoding='UTF-8'?> | ||||
|         <queryresult success='true' | ||||
|  | @ -233,14 +237,14 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|             datatypes='Solve' | ||||
|             timedout='' | ||||
|             timedoutpods='' | ||||
|             timing='0.883' | ||||
|             parsetiming='0.337' | ||||
|             timing='0.79' | ||||
|             parsetiming='0.338' | ||||
|             parsetimedout='false' | ||||
|             recalculate='' | ||||
|             id='MSPa347225h1ea85fgfbgb4000064ff000d25g5df3f' | ||||
|             host='http://www5a.wolframalpha.com' | ||||
|             server='52' | ||||
|             related='http://www5a.wolframalpha.com/api/v2/relatedQueries.jsp?...' | ||||
|             id='MSPa7481f7i06d25h3deh2900004810i3a78d9b4fdc' | ||||
|             host='http://www5b.wolframalpha.com' | ||||
|             server='23' | ||||
|             related='http://www5b.wolframalpha.com/api/v2/relatedQueries.jsp?id=...' | ||||
|             version='2.6'> | ||||
|          <pod title='Input interpretation' | ||||
|              scanner='Identity' | ||||
|  | @ -249,12 +253,7 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|              error='false' | ||||
|              numsubpods='1'> | ||||
|           <subpod title=''> | ||||
|            <img src='http://www5a.wolframalpha.com/Calculate/MSP/MSP349225h1ea85fgfbgb400005dhd93b9eegg8f32?...' | ||||
|                alt='solve x^2+x = 0' | ||||
|                title='solve x^2+x = 0' | ||||
|                width='157' | ||||
|                height='35' /> | ||||
|            <plaintext>solve x^2+x = 0</plaintext> | ||||
|            <plaintext>solve x^2+x0</plaintext> | ||||
|           </subpod> | ||||
|          </pod> | ||||
|          <pod title='Results' | ||||
|  | @ -265,20 +264,10 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|              numsubpods='2' | ||||
|              primary='true'> | ||||
|           <subpod title=''> | ||||
|            <img src='http://www5a.wolframalpha.com/Calculate/MSP/MSP350225h1ea85fgfbgb400005b1ebcefaha3ac97?...' | ||||
|                alt='x = -1' | ||||
|                title='x = -1' | ||||
|                width='47' | ||||
|                height='18' /> | ||||
|            <plaintext>x = -1</plaintext> | ||||
|            <plaintext>x-1</plaintext> | ||||
|           </subpod> | ||||
|           <subpod title=''> | ||||
|            <img src='http://www5a.wolframalpha.com/Calculate/MSP/MSP351225h1ea85fgfbgb4000032fic0ig981hc936?...' | ||||
|                alt='x = 0' | ||||
|                title='x = 0' | ||||
|                width='36' | ||||
|                height='18' /> | ||||
|            <plaintext>x = 0</plaintext> | ||||
|            <plaintext>x0</plaintext> | ||||
|           </subpod> | ||||
|           <states count='1'> | ||||
|            <state name='Step-by-step solution' | ||||
|  | @ -292,11 +281,6 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|              error='false' | ||||
|              numsubpods='1'> | ||||
|           <subpod title=''> | ||||
|            <img src='http://www5a.wolframalpha.com/Calculate/MSP/MSP352225h1ea85fgfbgb40000464054c665hc5dee?...' | ||||
|                alt='' | ||||
|                title='' | ||||
|                width='300' | ||||
|                height='181' /> | ||||
|            <plaintext></plaintext> | ||||
|           </subpod> | ||||
|          </pod> | ||||
|  | @ -307,11 +291,6 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|              error='false' | ||||
|              numsubpods='1'> | ||||
|           <subpod title=''> | ||||
|            <img src='http://www5a.wolframalpha.com/Calculate/MSP/MSP353225h1ea85fgfbgb400005ab1c8aai366fe46?...' | ||||
|                alt='' | ||||
|                title='' | ||||
|                width='310' | ||||
|                height='36' /> | ||||
|            <plaintext></plaintext> | ||||
|           </subpod> | ||||
|          </pod> | ||||
|  | @ -321,6 +300,8 @@ class TestWolframAlphaAPIEngine(SearxTestCase): | |||
|         response = mock.Mock(content=xml) | ||||
|         results = wolframalpha_api.response(response) | ||||
|         self.assertEqual(type(results), list) | ||||
|         self.assertEqual(len(results), 2) | ||||
|         self.assertEqual(len(results), 3) | ||||
|         self.assertIn('x=-1', results[0]['answer']) | ||||
|         self.assertIn('x=0', results[1]['answer']) | ||||
|         self.assertIn('solve x^2+x0 - Wolfram|Alpha'.decode('utf-8'), results[2]['title']) | ||||
|         self.assertEquals('http://www.wolframalpha.com/input/?i=solve+x%5E2%2Bx%EF%9F%990', results[2]['url']) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 a01200356
						a01200356