From 3e1c2153f75adbf3e5d9eab0b0d4e567893e8d64 Mon Sep 17 00:00:00 2001 From: Marc Abonce Seguin Date: Sat, 13 Apr 2019 00:17:32 -0500 Subject: [PATCH] [fix] duckduckgo images requests --- searx/engines/duckduckgo_images.py | 11 +++++++---- tests/unit/engines/test_duckduckgo_images.py | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/searx/engines/duckduckgo_images.py b/searx/engines/duckduckgo_images.py index 8c46ec92d..89924b71c 100644 --- a/searx/engines/duckduckgo_images.py +++ b/searx/engines/duckduckgo_images.py @@ -35,9 +35,12 @@ site_url = 'https://duckduckgo.com/?{query}&iar=images&iax=1&ia=images' # run query in site to get vqd number needed for requesting images # TODO: find a way to get this number without an extra request (is it a hash of the query?) -def get_vqd(query): - res = get(site_url.format(query=urlencode({'q': query}))) +def get_vqd(query, headers): + query_url = site_url.format(query=urlencode({'q': query})) + res = get(query_url, headers=headers) content = res.text + if content.find('vqd=\'') == -1: + raise Exception('Request failed') vqd = content[content.find('vqd=\'') + 5:] vqd = vqd[:vqd.find('\'')] return vqd @@ -47,7 +50,7 @@ def get_vqd(query): def request(query, params): # to avoid running actual external requests when testing if 'is_test' not in params: - vqd = get_vqd(query) + vqd = get_vqd(query, params['headers']) else: vqd = '12345' @@ -74,7 +77,7 @@ def response(resp): try: res_json = loads(content) except: - return [] + raise Exception('Cannot parse results') # parse results for result in res_json['results']: diff --git a/tests/unit/engines/test_duckduckgo_images.py b/tests/unit/engines/test_duckduckgo_images.py index 7a7657cd5..0d152bec1 100644 --- a/tests/unit/engines/test_duckduckgo_images.py +++ b/tests/unit/engines/test_duckduckgo_images.py @@ -41,7 +41,7 @@ class TestDuckduckgoImagesEngine(SearxTestCase): self.assertRaises(AttributeError, duckduckgo_images.response, '[]') response = mock.Mock(text='If this error persists, please let us know: ops@duckduckgo.com') - self.assertEqual(duckduckgo_images.response(response), []) + self.assertRaises(Exception, duckduckgo_images.response, response) json = u""" {