on master help sign in
add time range search with yahoo
commit93c0c49e9aba719c8c8e6b171e0dd515a586d32b authorNoemi Vanyi <sitbackandwait@gmail.com> dateSun 17 Jul 2016, 18:42 (10 years ago) parent3a9c3fb
4 files changed+35−11
searx/engines/__init__.py+2−1 searx/engines/yahoo.py+25−8 searx/search.py+7−2 searx/webapp.py+1
searx/engines/__init__.py+2−1
@@ -42,7 +42,8 @@ engine_default_args = {'paging': False,
4242 'shortcut': '-',
4343 'disabled': False,
4444 'suspend_end_time': 0,
45− 'continuous_errors': 0}
45+ 'continuous_errors': 0,
46+ 'time_range_support': False}
4647
4748
4849def load_module(filename):
searx/engines/yahoo.py+25−8
@@ -20,10 +20,12 @@ from searx.engines.xpath import extract_text, extract_url
2020categories = ['general']
2121paging = True
2222language_support = True
23+time_range_support = True
2324
2425# search-url
2526base_url = 'https://search.yahoo.com/'
2627search_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'
2729
2830# specific xpath variables
2931results_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' Sr ')]"
@@ -32,6 +34,9 @@ title_xpath = './/h3/a'
3234content_xpath = './/div[@class="compText aAbs"]'
3335suggestion_xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' AlsoTry ')]//a"
3436
37+time_range_dict = {'day': ['1d', 'd'],
38+ 'week': ['1w', 'w'],
39+ 'month': ['1m', 'm']}
3540
3641# remove yahoo-specific tracking-url
3742def parse_url(url_string):
@@ -51,18 +56,30 @@ def parse_url(url_string):
5156 return unquote(url_string[start:end])
5257
5358
59+def _get_url(query, offset, language, time_range):
60+ if time_range:
61+ return base_url + search_url_with_time.format(offset=offset,
62+ query=urlencode({'p': query}),
63+ lang=language,
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}),
68+ lang=language)
69+
70+
71+def _get_language(params):
72+ if params['language'] == 'all':
73+ return 'en'
74+ return params['language'].split('_')[0]
75+
76+
5477# do search-request
5578def request(query, params):
5679 offset = (params['pageno'] - 1) * 10 + 1
80+ language = _get_language(params)
5781
58− if params['language'] == 'all':
59− language = 'en'
60− else:
61− language = params['language'].split('_')[0]
62−
63− params['url'] = base_url + search_url.format(offset=offset,
64− query=urlencode({'p': query}),
65− lang=language)
82+ params['url'] = _get_url(query, offset, language, params['time_range'])
6683
6784 # TODO required?
6885 params['cookies']['sB'] = 'fl=1&vl=lang_{lang}&sh=1&rw=new&v=1'\
searx/search.py+7−2
@@ -138,6 +138,7 @@ class Search(object):
138138 self.paging = False
139139 self.pageno = 1
140140 self.lang = 'all'
141+ self.time_range = None
141142
142143 # set blocked engines
143144 self.disabled_engines = request.preferences.engines.get_disabled()
@@ -178,9 +179,9 @@ class Search(object):
178179 if len(query_obj.languages):
179180 self.lang = query_obj.languages[-1]
180181
181− self.engines = query_obj.engines
182+ self.time_range = self.request_data.get('time_range')
182183
183− self.categories = []
184+ self.engines = query_obj.engines
184185
185186 # if engines are calculated from query,
186187 # set categories by using that informations
@@ -279,6 +280,9 @@ class Search(object):
279280 if self.lang != 'all' and not engine.language_support:
280281 continue
281282
283+ if self.time_range and not engine.time_range_support:
284+ continue
285+
282286 # set default request parameters
283287 request_params = default_request_params()
284288 request_params['headers']['User-Agent'] = user_agent
@@ -293,6 +297,7 @@ class Search(object):
293297
294298 # 0 = None, 1 = Moderate, 2 = Strict
295299 request_params['safesearch'] = request.preferences.get_value('safesearch')
300+ request_params['time_range'] = self.time_range
296301
297302 # update request parameters dependent on
298303 # search-engine (contained in engines folder)
searx/webapp.py+1
@@ -459,6 +459,7 @@ def index():
459459 paging=search.paging,
460460 number_of_results=format_decimal(number_of_results),
461461 pageno=search.pageno,
462+ time_range=search.time_range,
462463 base_url=get_base_url(),
463464 suggestions=search.result_container.suggestions,
464465 answers=search.result_container.answers,