Browse Source

[enh] multilingual autocomplete

implemented for wikipedia, qwant and google
a01200356 9 years ago
parent
commit
94cb3a7f11
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,7 +110,7 @@ def searx_bang(full_query):
110 110
     return list(result_set)
111 111
 
112 112
 
113
-def dbpedia(query):
113
+def dbpedia(query, lang):
114 114
     # dbpedia autocompleter, no HTTPS
115 115
     autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
116 116
 
@@ -126,7 +126,7 @@ def dbpedia(query):
126 126
     return results
127 127
 
128 128
 
129
-def duckduckgo(query):
129
+def duckduckgo(query, lang):
130 130
     # duckduckgo autocompleter
131 131
     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
132 132
 
@@ -136,11 +136,11 @@ def duckduckgo(query):
136 136
     return []
137 137
 
138 138
 
139
-def google(query):
139
+def google(query, lang):
140 140
     # google autocompleter
141 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 145
     results = []
146 146
 
@@ -151,8 +151,8 @@ def google(query):
151 151
     return results
152 152
 
153 153
 
154
-def startpage(query):
155
-    # wikipedia autocompleter
154
+def startpage(query, lang):
155
+    # startpage autocompleter
156 156
     url = 'https://startpage.com/do/suggest?{query}'
157 157
 
158 158
     resp = get(url.format(query=urlencode({'query': query}))).text.split('\n')
@@ -161,11 +161,11 @@ def startpage(query):
161 161
     return []
162 162
 
163 163
 
164
-def qwant(query):
164
+def qwant(query, lang):
165 165
     # qwant autocompleter (additional parameter : lang=en_en&count=xxx )
166 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 170
     results = []
171 171
 
@@ -178,9 +178,9 @@ def qwant(query):
178 178
     return results
179 179
 
180 180
 
181
-def wikipedia(query):
181
+def wikipedia(query, lang):
182 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 185
     resp = loads(get(url.format(urlencode(dict(search=query)))).text)
186 186
     if len(resp) > 1:

+ 8
- 2
searx/webapp.py View File

@@ -492,7 +492,7 @@ def autocompleter():
492 492
     if not query.getSearchQuery():
493 493
         return '', 400
494 494
 
495
-    # run autocompleter
495
+    # get autocompleter
496 496
     completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete']))
497 497
 
498 498
     # parse searx specific autocompleter results like !bang
@@ -500,8 +500,14 @@ def autocompleter():
500 500
 
501 501
     # normal autocompletion results only appear if max 3 inner results returned
502 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 509
         # run autocompletion
504
-        raw_results.extend(completer(query.getSearchQuery()))
510
+        raw_results.extend(completer(query.getSearchQuery(), language))
505 511
 
506 512
     # parse results (write :language and !engine back to result string)
507 513
     results = []