Browse Source

Merge pull request #528 from a01200356/autocomplete

[enh] multilingual autocomplete
Adam Tauber 9 years ago
parent
commit
26c818193d
2 changed files with 18 additions and 12 deletions
  1. 10
    10
      searx/autocomplete.py
  2. 8
    2
      searx/webapp.py

+ 10
- 10
searx/autocomplete.py View File

110
     return list(result_set)
110
     return list(result_set)
111
 
111
 
112
 
112
 
113
-def dbpedia(query):
113
+def dbpedia(query, lang):
114
     # dbpedia autocompleter, no HTTPS
114
     # dbpedia autocompleter, no HTTPS
115
     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
115
     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
116
 
116
 
126
     return results
126
     return results
127
 
127
 
128
 
128
 
129
-def duckduckgo(query):
129
+def duckduckgo(query, lang):
130
     # duckduckgo autocompleter
130
     # duckduckgo autocompleter
131
     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
131
     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
132
 
132
 
136
     return []
136
     return []
137
 
137
 
138
 
138
 
139
-def google(query):
139
+def google(query, lang):
140
     # google autocompleter
140
     # google autocompleter
141
     autocomplete_url = 'https://suggestqueries.google.com/complete/search?client=toolbar&'
141
     autocomplete_url = 'https://suggestqueries.google.com/complete/search?client=toolbar&'
142
 
142
 
143
-    response = get(autocomplete_url + urlencode(dict(q=query)))
143
+    response = get(autocomplete_url + urlencode(dict(hl=lang, q=query)))
144
 
144
 
145
     results = []
145
     results = []
146
 
146
 
151
     return results
151
     return results
152
 
152
 
153
 
153
 
154
-def startpage(query):
155
-    # wikipedia autocompleter
154
+def startpage(query, lang):
155
+    # startpage autocompleter
156
     url = 'https://startpage.com/do/suggest?{query}'
156
     url = 'https://startpage.com/do/suggest?{query}'
157
 
157
 
158
     resp = get(url.format(query=urlencode({'query': query}))).text.split('\n')
158
     resp = get(url.format(query=urlencode({'query': query}))).text.split('\n')
161
     return []
161
     return []
162
 
162
 
163
 
163
 
164
-def qwant(query):
164
+def qwant(query, lang):
165
     # qwant autocompleter (additional parameter : lang=en_en&count=xxx )
165
     # qwant autocompleter (additional parameter : lang=en_en&count=xxx )
166
     url = 'https://api.qwant.com/api/suggest?{query}'
166
     url = 'https://api.qwant.com/api/suggest?{query}'
167
 
167
 
168
-    resp = get(url.format(query=urlencode({'q': query})))
168
+    resp = get(url.format(query=urlencode({'q': query, 'lang': lang})))
169
 
169
 
170
     results = []
170
     results = []
171
 
171
 
178
     return results
178
     return results
179
 
179
 
180
 
180
 
181
-def wikipedia(query):
181
+def wikipedia(query, lang):
182
     # wikipedia autocompleter
182
     # wikipedia autocompleter
183
-    url = 'https://en.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json'
183
+    url = 'https://' + lang + '.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json'
184
 
184
 
185
     resp = loads(get(url.format(urlencode(dict(search=query)))).text)
185
     resp = loads(get(url.format(urlencode(dict(search=query)))).text)
186
     if len(resp) > 1:
186
     if len(resp) > 1:

+ 8
- 2
searx/webapp.py View File

492
     if not query.getSearchQuery():
492
     if not query.getSearchQuery():
493
         return '', 400
493
         return '', 400
494
 
494
 
495
-    # run autocompleter
495
+    # get autocompleter
496
     completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete']))
496
     completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete']))
497
 
497
 
498
     # parse searx specific autocompleter results like !bang
498
     # parse searx specific autocompleter results like !bang
500
 
500
 
501
     # normal autocompletion results only appear if max 3 inner results returned
501
     # normal autocompletion results only appear if max 3 inner results returned
502
     if len(raw_results) <= 3 and completer:
502
     if len(raw_results) <= 3 and completer:
503
+        # get language from cookie
504
+        language = request.cookies.get('language')
505
+        if not language or language == 'all':
506
+            language = 'en'
507
+        else:
508
+            language = language.split('_')[0]
503
         # run autocompletion
509
         # run autocompletion
504
-        raw_results.extend(completer(query.getSearchQuery()))
510
+        raw_results.extend(completer(query.getSearchQuery(), language))
505
 
511
 
506
     # parse results (write :language and !engine back to result string)
512
     # parse results (write :language and !engine back to result string)
507
     results = []
513
     results = []