on master help sign in
[fix] duckduckgo_definitions - where 'AnswerType' is 'calc'
4998e9eMarkus Heiser
searx/engines/duckduckgo_definitions.py+20−3
@@ -1,11 +1,25 @@
1+"""
2+DuckDuckGo (definitions)
3+
4+- `Instant Answer API`_
5+- `DuckDuckGo query`_
6+
7+.. _Instant Answer API: https://duckduckgo.com/api
8+.. _DuckDuckGo query: https://api.duckduckgo.com/?q=DuckDuckGo&format=json&pretty=1
9+
10+"""
11+
1import json
12import json
2from lxml import html
13from lxml import html
3from re import compile
14from re import compile
15+import logging
4from searx.engines.xpath import extract_text
16from searx.engines.xpath import extract_text
5from searx.engines.duckduckgo import _fetch_supported_languages, supported_languages_url, language_aliases
17from searx.engines.duckduckgo import _fetch_supported_languages, supported_languages_url, language_aliases
6from searx.url_utils import urlencode
18from searx.url_utils import urlencode
7from searx.utils import html_to_text, match_language
19from searx.utils import html_to_text, match_language
8
20
21+logger = logging.getLogger('searx.engines.'+ __name__)
22+
9url = 'https://api.duckduckgo.com/'\
23url = 'https://api.duckduckgo.com/'\
10 + '?{query}&format=json&pretty=0&no_redirect=1&d=1'
24 + '?{query}&format=json&pretty=0&no_redirect=1&d=1'
11
25
@@ -25,7 +39,9 @@ def result_to_text(url, text, htmlResult):
25def request(query, params):
39def request(query, params):
26 params['url'] = url.format(query=urlencode({'q': query}))
40 params['url'] = url.format(query=urlencode({'q': query}))
27 language = match_language(params['language'], supported_languages, language_aliases)
41 language = match_language(params['language'], supported_languages, language_aliases)
28− params['headers']['Accept-Language'] = language.split('-')[0]
42+ language = language.split('-')[0]
43+ params['headers']['Accept-Language'] = language
44+ logger.debug("query %s: // headers: %s", params['url'], params['headers'])
29 return params
45 return params
30
46
31
47
@@ -43,8 +59,9 @@ def response(resp):
43
59
44 # add answer if there is one
60 # add answer if there is one
45 answer = search_res.get('Answer', '')
61 answer = search_res.get('Answer', '')
46− if answer != '':
62+ if answer:
63+ if search_res.get('AnswerType', '') not in ['calc']:
47− results.append({'answer': html_to_text(answer)})
64+ results.append({'answer': html_to_text(answer)})
48
65
49 # add infobox
66 # add infobox
50 if 'Definition' in search_res:
67 if 'Definition' in search_res: