on master help sign in
[fix] autocomplete encoding
8e2d996Adam Tauber
searx/autocomplete.py+10−7
@@ -1,13 +1,15 @@
1from lxml import etree
1from lxml import etree
2from requests import get
2from requests import get
3from json import loads
3from json import loads
4+from urllib import urlencode
4
5
5
6
6def dbpedia(query):
7def dbpedia(query):
7 # dbpedia autocompleter
8 # dbpedia autocompleter
8− autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString={q}' # noqa
9+ autocomplete_url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?' # noqa
9
10
10− response = get(autocomplete_url.format(q=query))
11+ response = get(autocomplete_url
12+ + urlencode(dict(QueryString=query)))
11
13
12 results = []
14 results = []
13
15
@@ -21,14 +23,15 @@ def dbpedia(query):
21
23
22def google(query):
24def google(query):
23 # google autocompleter
25 # google autocompleter
24− autocomplete_url = 'http://suggestqueries.google.com/complete/search?client=toolbar&q={q}' # noqa
26+ autocomplete_url = 'http://suggestqueries.google.com/complete/search?client=toolbar&' # noqa
25
27
26− response = get(autocomplete_url.format(q=query))
28+ response = get(autocomplete_url
29+ + urlencode(dict(q=query)))
27
30
28 results = []
31 results = []
29
32
30 if response.ok:
33 if response.ok:
31− dom = etree.fromstring(response.content)
34+ dom = etree.fromstring(response.text)
32 results = dom.xpath('//suggestion/@data')
35 results = dom.xpath('//suggestion/@data')
33
36
34 return results
37 return results
@@ -36,9 +39,9 @@ def google(query):
36
39
37def wikipedia(query):
40def wikipedia(query):
38 # wikipedia autocompleter
41 # wikipedia autocompleter
39− url = 'https://en.wikipedia.org/w/api.php?action=opensearch&search={q}&limit=10&namespace=0&format=json' # noqa
42+ url = 'https://en.wikipedia.org/w/api.php?action=opensearch&{0}&limit=10&namespace=0&format=json' # noqa
40
43
41− resp = loads(get(url.format(q=query)).text)
44+ resp = loads(get(url.format(urlencode(dict(q=query)))).text)
42 return resp[1]
45 return resp[1]
43
46
44
47
searx/webapp.py+2−6
@@ -252,7 +252,7 @@ def autocompleter():
252 request_data = request.args
252 request_data = request.args
253
253
254 # TODO fix XSS-vulnerability
254 # TODO fix XSS-vulnerability
255− query = request_data.get('q')
255+ query = request_data.get('q', '').encode('utf-8')
256
256
257 if not query:
257 if not query:
258 return
258 return
@@ -262,11 +262,7 @@ def autocompleter():
262 if not completer:
262 if not completer:
263 return
263 return
264
264
265− try:
266− results = completer(query)
265+ results = completer(query)
267− except Exception, e:
268− print e
269− results = []
270
266
271 if request_data.get('format') == 'x-suggestions':
267 if request_data.get('format') == 'x-suggestions':
272 return Response(json.dumps([query, results]),
268 return Response(json.dumps([query, results]),