@@ -11,9 +11,9 @@
13from datetime import date, timedelta
13from datetime import date, timedelta
14+from json import loads
14from lxml import html
15from lxml import html
15−from searx.url_utils import urlencode, urlparse, parse_qs
16+from searx.url_utils import urlencode
18# engine dependent config
18# engine dependent config
19categories = ['images']
19categories = ['images']
@@ -25,8 +25,7 @@ number_of_results = 100
25search_url = 'https://www.google.com/search'\
25search_url = 'https://www.google.com/search'\
26 '?{query}'\
26 '?{query}'\
27 '&tbm=isch'\
27 '&tbm=isch'\
28− '&gbv=1'\
28+ '&yv=2'\
30 '&{search_options}'
29 '&{search_options}'
31time_range_attr = "qdr:{range}"
30time_range_attr = "qdr:{range}"
32time_range_custom_attr = "cdr:1,cd_min:{start},cd_max{end}"
31time_range_custom_attr = "cdr:1,cd_min:{start},cd_max{end}"
@@ -38,6 +37,7 @@ time_range_dict = {'day': 'd',
38# do search-request
37# do search-request
39def request(query, params):
38def request(query, params):
40 search_options = {
39 search_options = {
40+ 'ijn': params['pageno'] - 1,
41 'start': (params['pageno'] - 1) * number_of_results
41 'start': (params['pageno'] - 1) * number_of_results
@@ -51,7 +51,7 @@ def request(query, params):
51 search_options['tbs'] = time_range_custom_attr.format(start=start, end=end)
51 search_options['tbs'] = time_range_custom_attr.format(start=start, end=end)
53 if safesearch and params['safesearch']:
53 if safesearch and params['safesearch']:
54− search_options['safe'] = 'active'
54+ search_options['safe'] = 'on'
56 params['url'] = search_url.format(query=urlencode({'q': query}),
56 params['url'] = search_url.format(query=urlencode({'q': query}),
57 search_options=urlencode(search_options))
57 search_options=urlencode(search_options))
@@ -61,30 +61,27 @@ def request(query, params):
62# get response from search-request
62# get response from search-request
63def response(resp):
63def response(resp):
64 dom = html.fromstring(resp.text)
66 dom = html.fromstring(resp.text)
66− results = []
68+ # parse results
67− for element in dom.xpath('//div[@id="search"] //td'):
69+ for result in dom.xpath('//div[contains(@class, "rg_meta")]/text()'):
68− link = element.xpath('./a')[0]
70+
70− google_url = urlparse(link.xpath('.//@href')[0])
72+ metadata = loads(result)
71− query = parse_qs(google_url.query)
73+ img_format = "{0} {1}x{2}".format(metadata['ity'], str(metadata['ow']), str(metadata['oh']))
72− source_url = next(iter(query.get('q', [])), None)
74+ source = "{0} ({1})".format(metadata['st'], metadata['isu'])
73−
75+ results.append({'url': metadata['ru'],
74− title_parts = element.xpath('./cite//following-sibling::*/text()')
76+ 'title': metadata['pt'],
75− title_parts.extend(element.xpath('./cite//following-sibling::text()')[:-1])
78− 'title': ''.join(title_parts),
79− 'content': '',
77+ 'content': metadata['s'],
79+ 'img_format': img_format,
80+ 'thumbnail_src': metadata['tu'],
81+ 'img_src': metadata['ou'],
80− 'template': 'images.html',
82+ 'template': 'images.html'})
81− 'url': source_url,
83+
82− 'img_src': source_url,
84+ except:
83− 'thumbnail_src': next(iter(link.xpath('.//img //@src')), None)
86− if not source_url or not result['thumbnail_src']:
89− results.append(result)
90 return results
87 return results