mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	fix wikipedia engine and add comments
* add paging support * make number_of_results changable * make result calculation more clear * add comments
This commit is contained in:
		
							parent
							
								
									8eb064dea1
								
							
						
					
					
						commit
						bb628469d3
					
				
					 2 changed files with 48 additions and 12 deletions
				
			
		|  | @ -1,30 +1,67 @@ | ||||||
|  | ## Wikipedia (Web) | ||||||
|  | #  | ||||||
|  | # @website     http://www.wikipedia.org | ||||||
|  | # @provide-api yes (http://www.mediawiki.org/wiki/API:Search) | ||||||
|  | #  | ||||||
|  | # @using-api   yes | ||||||
|  | # @results     JSON | ||||||
|  | # @stable      yes | ||||||
|  | # @parse       url, title  | ||||||
|  | # | ||||||
|  | # @todo        content | ||||||
|  | 
 | ||||||
| from json import loads | from json import loads | ||||||
| from urllib import urlencode, quote | from urllib import urlencode, quote | ||||||
| 
 | 
 | ||||||
| url = 'https://{language}.wikipedia.org/' | # engine dependent config | ||||||
| 
 | categories = ['general'] | ||||||
| search_url = url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}'  # noqa |  | ||||||
| 
 |  | ||||||
| number_of_results = 10 |  | ||||||
| 
 |  | ||||||
| language_support = True | language_support = True | ||||||
|  | paging = True | ||||||
|  | number_of_results = 1 | ||||||
|  |      | ||||||
|  | # search-url | ||||||
|  | url = 'https://{language}.wikipedia.org/' | ||||||
|  | search_url = url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}&srlimit={limit}'  # noqa | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # do search-request | ||||||
| def request(query, params): | def request(query, params): | ||||||
|     offset = (params['pageno'] - 1) * 10 |     offset = (params['pageno'] - 1) * number_of_results | ||||||
|  | 
 | ||||||
|     if params['language'] == 'all': |     if params['language'] == 'all': | ||||||
|         language = 'en' |         language = 'en' | ||||||
|     else: |     else: | ||||||
|         language = params['language'].split('_')[0] |         language = params['language'].split('_')[0] | ||||||
|  |      | ||||||
|  |     # write search-language back to params, required in response | ||||||
|     params['language'] = language |     params['language'] = language | ||||||
|  | 
 | ||||||
|     params['url'] = search_url.format(query=urlencode({'srsearch': query}), |     params['url'] = search_url.format(query=urlencode({'srsearch': query}), | ||||||
|                                       offset=offset, |                                       offset=offset, | ||||||
|  |                                       limit=number_of_results, | ||||||
|                                       language=language) |                                       language=language) | ||||||
|  | 
 | ||||||
|     return params |     return params | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # get response from search-request | ||||||
| def response(resp): | def response(resp): | ||||||
|  |     results = [] | ||||||
|  | 
 | ||||||
|     search_results = loads(resp.text) |     search_results = loads(resp.text) | ||||||
|     res = search_results.get('query', {}).get('search', []) | 
 | ||||||
|     return [{'url': url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')),  # noqa |     # return empty array if there are no results | ||||||
|         'title': result['title']} for result in res[:int(number_of_results)]] |     if not search_results.get('query', {}).get('search'): | ||||||
|  |         return [] | ||||||
|  | 
 | ||||||
|  |     # parse results | ||||||
|  |     for result in search_results['query']['search']: | ||||||
|  |         res_url = url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')) | ||||||
|  |          | ||||||
|  |         # append result | ||||||
|  |         results.append({'url': res_url, | ||||||
|  |                         'title': result['title'], | ||||||
|  |                         'content': ''}) | ||||||
|  | 
 | ||||||
|  |     # return results | ||||||
|  |     return results | ||||||
|  |  | ||||||
|  | @ -11,9 +11,8 @@ server: | ||||||
| engines: | engines: | ||||||
|   - name : wikipedia |   - name : wikipedia | ||||||
|     engine : wikipedia |     engine : wikipedia | ||||||
|     number_of_results : 1 |  | ||||||
|     paging : False |  | ||||||
|     shortcut : wp |     shortcut : wp | ||||||
|  | #    number_of_results : 1 # default is 1 | ||||||
| 
 | 
 | ||||||
|   - name : bing |   - name : bing | ||||||
|     engine : bing |     engine : bing | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Thomas Pointhuber
						Thomas Pointhuber