@@ -20,10 +20,12 @@ from searx.engines.xpath import extract_text, extract_url
20categories = ['general']
20categories = ['general']
21paging = True
21paging = True
22language_support = True
22language_support = True
23+time_range_support = True
24# search-url
25# search-url
25base_url = 'https://search.yahoo.com/'
26base_url = 'https://search.yahoo.com/'
26search_url = 'search?{query}&b={offset}&fl=1&vl=lang_{lang}'
27search_url = 'search?{query}&b={offset}&fl=1&vl=lang_{lang}'
28+search_url_with_time = 'search?{query}&b={offset}&fl=1&vl=lang_{lang}&age={age}&btf={btf}&fr2=time'
28# specific xpath variables
30# specific xpath variables
29results_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' Sr ')]"
31results_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' Sr ')]"
@@ -32,6 +34,9 @@ title_xpath = './/h3/a'
32content_xpath = './/div[@class="compText aAbs"]'
34content_xpath = './/div[@class="compText aAbs"]'
33suggestion_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' AlsoTry ')]//a"
35suggestion_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' AlsoTry ')]//a"
37+time_range_dict = {'day': ['1d', 'd'],
39+ 'month': ['1m', 'm']}
36# remove yahoo-specific tracking-url
41# remove yahoo-specific tracking-url
37def parse_url(url_string):
42def parse_url(url_string):
@@ -51,18 +56,30 @@ def parse_url(url_string):
51 return unquote(url_string[start:end])
56 return unquote(url_string[start:end])
59+def _get_url(query, offset, language, time_range):
61+ return base_url + search_url_with_time.format(offset=offset,
62+ query=urlencode({'p': query}),
64+ age=time_range_dict[time_range][0],
65+ btf=time_range_dict[time_range][1])
66+ return base_url + search_url.format(offset=offset,
67+ query=urlencode({'p': query}),
71+def _get_language(params):
72+ if params['language'] == 'all':
74+ return params['language'].split('_')[0]
54# do search-request
77# do search-request
55def request(query, params):
78def request(query, params):
56 offset = (params['pageno'] - 1) * 10 + 1
79 offset = (params['pageno'] - 1) * 10 + 1
80+ language = _get_language(params)
58− if params['language'] == 'all':
82+ params['url'] = _get_url(query, offset, language, params['time_range'])
61− language = params['language'].split('_')[0]
63− params['url'] = base_url + search_url.format(offset=offset,
64− query=urlencode({'p': query}),
67 # TODO required?
84 # TODO required?
68 params['cookies']['sB'] = 'fl=1&vl=lang_{lang}&sh=1&rw=new&v=1'\
85 params['cookies']['sB'] = 'fl=1&vl=lang_{lang}&sh=1&rw=new&v=1'\