Loading searx/engines/duckduckgo.py +16 −14 Original line number Original line Diff line number Diff line Loading @@ -13,17 +13,17 @@ import babel import lxml.html import lxml.html from searx import ( from searx import ( network, locales, locales, redislib, redislib, external_bang, external_bang, ) ) from searx import redisdb from searx.utils import ( from searx.utils import ( eval_xpath, eval_xpath, eval_xpath_getindex, eval_xpath_getindex, extract_text, extract_text, ) ) from searx.network import get # see https://github.com/searxng/searxng/issues/762 from searx import redisdb from searx.enginelib.traits import EngineTraits from searx.enginelib.traits import EngineTraits from searx.exceptions import SearxEngineAPIException from searx.exceptions import SearxEngineAPIException Loading Loading @@ -94,12 +94,12 @@ def get_vqd(query, headers): logger.debug("re-use cached vqd value: %s", value) logger.debug("re-use cached vqd value: %s", value) return value return value query_url = 'https://duckduckgo.com/?{query}&iar=images'.format(query=urlencode({'q': query})) query_url = 'https://duckduckgo.com/?q={query}&atb=v290-5'.format(query=urlencode({'q': query})) res = network.get(query_url, headers=headers) res = get(query_url, headers=headers) content = res.text content = res.text # type: ignore if content.find('vqd=\'') == -1: if content.find('vqd=\"') == -1: raise SearxEngineAPIException('Request failed') raise SearxEngineAPIException('Request failed') value = content[content.find('vqd=\'') + 5 :] value = content[content.find('vqd=\"') + 5 :] value = value[: value.find('\'')] value = value[: value.find('\'')] logger.debug("new vqd value: %s", value) logger.debug("new vqd value: %s", value) cache_vqd(query, value) cache_vqd(query, value) Loading Loading @@ -139,7 +139,9 @@ def get_ddg_lang(eng_traits: EngineTraits, sxng_locale, default='en_US'): params['cookies']['kl'] = eng_region # 'ar-es' params['cookies']['kl'] = eng_region # 'ar-es' """ """ return eng_traits.custom['lang_region'].get(sxng_locale, eng_traits.get_language(sxng_locale, default)) return eng_traits.custom['lang_region'].get( # type: ignore sxng_locale, eng_traits.get_language(sxng_locale, default) ) ddg_reg_map = { ddg_reg_map = { Loading Loading @@ -358,13 +360,13 @@ def fetch_traits(engine_traits: EngineTraits): engine_traits.all_locale = 'wt-wt' engine_traits.all_locale = 'wt-wt' # updated from u588 to u661 / should be updated automatically? # updated from u588 to u661 / should be updated automatically? resp = network.get('https://duckduckgo.com/util/u661.js') resp = get('https://duckduckgo.com/util/u661.js') if not resp.ok: if not resp.ok: # type: ignore print("ERROR: response from DuckDuckGo is not OK.") print("ERROR: response from DuckDuckGo is not OK.") pos = resp.text.find('regions:{') + 8 pos = resp.text.find('regions:{') + 8 # type: ignore js_code = resp.text[pos:] js_code = resp.text[pos:] # type: ignore pos = js_code.find('}') + 1 pos = js_code.find('}') + 1 regions = json.loads(js_code[:pos]) regions = json.loads(js_code[:pos]) Loading Loading @@ -399,8 +401,8 @@ def fetch_traits(engine_traits: EngineTraits): engine_traits.custom['lang_region'] = {} engine_traits.custom['lang_region'] = {} pos = resp.text.find('languages:{') + 10 pos = resp.text.find('languages:{') + 10 # type: ignore js_code = resp.text[pos:] js_code = resp.text[pos:] # type: ignore pos = js_code.find('}') + 1 pos = js_code.find('}') + 1 js_code = '{"' + js_code[1:pos].replace(':', '":').replace(',', ',"') js_code = '{"' + js_code[1:pos].replace(':', '":').replace(',', ',"') languages = json.loads(js_code) languages = json.loads(js_code) Loading Loading
searx/engines/duckduckgo.py +16 −14 Original line number Original line Diff line number Diff line Loading @@ -13,17 +13,17 @@ import babel import lxml.html import lxml.html from searx import ( from searx import ( network, locales, locales, redislib, redislib, external_bang, external_bang, ) ) from searx import redisdb from searx.utils import ( from searx.utils import ( eval_xpath, eval_xpath, eval_xpath_getindex, eval_xpath_getindex, extract_text, extract_text, ) ) from searx.network import get # see https://github.com/searxng/searxng/issues/762 from searx import redisdb from searx.enginelib.traits import EngineTraits from searx.enginelib.traits import EngineTraits from searx.exceptions import SearxEngineAPIException from searx.exceptions import SearxEngineAPIException Loading Loading @@ -94,12 +94,12 @@ def get_vqd(query, headers): logger.debug("re-use cached vqd value: %s", value) logger.debug("re-use cached vqd value: %s", value) return value return value query_url = 'https://duckduckgo.com/?{query}&iar=images'.format(query=urlencode({'q': query})) query_url = 'https://duckduckgo.com/?q={query}&atb=v290-5'.format(query=urlencode({'q': query})) res = network.get(query_url, headers=headers) res = get(query_url, headers=headers) content = res.text content = res.text # type: ignore if content.find('vqd=\'') == -1: if content.find('vqd=\"') == -1: raise SearxEngineAPIException('Request failed') raise SearxEngineAPIException('Request failed') value = content[content.find('vqd=\'') + 5 :] value = content[content.find('vqd=\"') + 5 :] value = value[: value.find('\'')] value = value[: value.find('\'')] logger.debug("new vqd value: %s", value) logger.debug("new vqd value: %s", value) cache_vqd(query, value) cache_vqd(query, value) Loading Loading @@ -139,7 +139,9 @@ def get_ddg_lang(eng_traits: EngineTraits, sxng_locale, default='en_US'): params['cookies']['kl'] = eng_region # 'ar-es' params['cookies']['kl'] = eng_region # 'ar-es' """ """ return eng_traits.custom['lang_region'].get(sxng_locale, eng_traits.get_language(sxng_locale, default)) return eng_traits.custom['lang_region'].get( # type: ignore sxng_locale, eng_traits.get_language(sxng_locale, default) ) ddg_reg_map = { ddg_reg_map = { Loading Loading @@ -358,13 +360,13 @@ def fetch_traits(engine_traits: EngineTraits): engine_traits.all_locale = 'wt-wt' engine_traits.all_locale = 'wt-wt' # updated from u588 to u661 / should be updated automatically? # updated from u588 to u661 / should be updated automatically? resp = network.get('https://duckduckgo.com/util/u661.js') resp = get('https://duckduckgo.com/util/u661.js') if not resp.ok: if not resp.ok: # type: ignore print("ERROR: response from DuckDuckGo is not OK.") print("ERROR: response from DuckDuckGo is not OK.") pos = resp.text.find('regions:{') + 8 pos = resp.text.find('regions:{') + 8 # type: ignore js_code = resp.text[pos:] js_code = resp.text[pos:] # type: ignore pos = js_code.find('}') + 1 pos = js_code.find('}') + 1 regions = json.loads(js_code[:pos]) regions = json.loads(js_code[:pos]) Loading Loading @@ -399,8 +401,8 @@ def fetch_traits(engine_traits: EngineTraits): engine_traits.custom['lang_region'] = {} engine_traits.custom['lang_region'] = {} pos = resp.text.find('languages:{') + 10 pos = resp.text.find('languages:{') + 10 # type: ignore js_code = resp.text[pos:] js_code = resp.text[pos:] # type: ignore pos = js_code.find('}') + 1 pos = js_code.find('}') + 1 js_code = '{"' + js_code[1:pos].replace(':', '":').replace(',', ',"') js_code = '{"' + js_code[1:pos].replace(':', '":').replace(',', ',"') languages = json.loads(js_code) languages = json.loads(js_code) Loading