forked from zaclys/searxng
		
	Merge pull request #528 from a01200356/autocomplete
[enh] multilingual autocomplete
This commit is contained in:
		
						commit
						26c818193d
					
				
					 2 changed files with 18 additions and 12 deletions
				
			
		|  | @ -110,7 +110,7 @@ def searx_bang(full_query): | ||||||
|     return list(result_set) |     return list(result_set) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def dbpedia(query): | def dbpedia(query, lang): | ||||||
|     # dbpedia autocompleter, no HTTPS |     # dbpedia autocompleter, no HTTPS | ||||||
|     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?' |     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?' | ||||||
| 
 | 
 | ||||||
|  | @ -126,7 +126,7 @@ def dbpedia(query): | ||||||
|     return results |     return results | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def duckduckgo(query): | def duckduckgo(query, lang): | ||||||
|     # duckduckgo autocompleter |     # duckduckgo autocompleter | ||||||
|     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list' |     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list' | ||||||
| 
 | 
 | ||||||
|  | @ -136,11 +136,11 @@ def duckduckgo(query): | ||||||
|     return [] |     return [] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def google(query): | def google(query, lang): | ||||||
|     # google autocompleter |     # google autocompleter | ||||||
|     autocomplete_url = 'https://suggestqueries.google.com/complete/search?client=toolbar&' |     autocomplete_url = 'https://suggestqueries.google.com/complete/search?client=toolbar&' | ||||||
| 
 | 
 | ||||||
|     response = get(autocomplete_url + urlencode(dict(q=query))) |     response = get(autocomplete_url + urlencode(dict(hl=lang, q=query))) | ||||||
| 
 | 
 | ||||||
|     results = [] |     results = [] | ||||||
| 
 | 
 | ||||||
|  | @ -151,8 +151,8 @@ def google(query): | ||||||
|     return results |     return results | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def startpage(query): | def startpage(query, lang): | ||||||
|     # wikipedia autocompleter |     # startpage autocompleter | ||||||
|     url = 'https://startpage.com/do/suggest?{query}' |     url = 'https://startpage.com/do/suggest?{query}' | ||||||
| 
 | 
 | ||||||
|     resp = get(url.format(query=urlencode({'query': query}))).text.split('\n') |     resp = get(url.format(query=urlencode({'query': query}))).text.split('\n') | ||||||
|  | @ -161,11 +161,11 @@ def startpage(query): | ||||||
|     return [] |     return [] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def qwant(query): | def qwant(query, lang): | ||||||
|     # qwant autocompleter (additional parameter : lang=en_en&count=xxx ) |     # qwant autocompleter (additional parameter : lang=en_en&count=xxx ) | ||||||
|     url = 'https://api.qwant.com/api/suggest?{query}' |     url = 'https://api.qwant.com/api/suggest?{query}' | ||||||
| 
 | 
 | ||||||
|     resp = get(url.format(query=urlencode({'q': query}))) |     resp = get(url.format(query=urlencode({'q': query, 'lang': lang}))) | ||||||
| 
 | 
 | ||||||
|     results = [] |     results = [] | ||||||
| 
 | 
 | ||||||
|  | @ -178,9 +178,9 @@ def qwant(query): | ||||||
|     return results |     return results | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def wikipedia(query): | def wikipedia(query, lang): | ||||||
|     # wikipedia autocompleter |     # wikipedia autocompleter | ||||||
|     url = 'https://en.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json' |     url = 'https://' + lang + '.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json' | ||||||
| 
 | 
 | ||||||
|     resp = loads(get(url.format(urlencode(dict(search=query)))).text) |     resp = loads(get(url.format(urlencode(dict(search=query)))).text) | ||||||
|     if len(resp) > 1: |     if len(resp) > 1: | ||||||
|  |  | ||||||
|  | @ -492,7 +492,7 @@ def autocompleter(): | ||||||
|     if not query.getSearchQuery(): |     if not query.getSearchQuery(): | ||||||
|         return '', 400 |         return '', 400 | ||||||
| 
 | 
 | ||||||
|     # run autocompleter |     # get autocompleter | ||||||
|     completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete'])) |     completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete'])) | ||||||
| 
 | 
 | ||||||
|     # parse searx specific autocompleter results like !bang |     # parse searx specific autocompleter results like !bang | ||||||
|  | @ -500,8 +500,14 @@ def autocompleter(): | ||||||
| 
 | 
 | ||||||
|     # normal autocompletion results only appear if max 3 inner results returned |     # normal autocompletion results only appear if max 3 inner results returned | ||||||
|     if len(raw_results) <= 3 and completer: |     if len(raw_results) <= 3 and completer: | ||||||
|  |         # get language from cookie | ||||||
|  |         language = request.cookies.get('language') | ||||||
|  |         if not language or language == 'all': | ||||||
|  |             language = 'en' | ||||||
|  |         else: | ||||||
|  |             language = language.split('_')[0] | ||||||
|         # run autocompletion |         # run autocompletion | ||||||
|         raw_results.extend(completer(query.getSearchQuery())) |         raw_results.extend(completer(query.getSearchQuery(), language)) | ||||||
| 
 | 
 | ||||||
|     # parse results (write :language and !engine back to result string) |     # parse results (write :language and !engine back to result string) | ||||||
|     results = [] |     results = [] | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Adam Tauber
						Adam Tauber