on master help sign in
add time range search for bing news
f70d405Noémi Ványi
searx/engines/bing_news.py+19−5
@@ -22,10 +22,15 @@ from searx.utils import list_get
22categories = ['news']
22categories = ['news']
23paging = True
23paging = True
24language_support = True
24language_support = True
25+time_range_support = True
25
26
26# search-url
27# search-url
27base_url = 'https://www.bing.com/'
28base_url = 'https://www.bing.com/'
28search_string = 'news/search?{query}&first={offset}&format=RSS'
29search_string = 'news/search?{query}&first={offset}&format=RSS'
30+search_string_with_time = 'news/search?{query}&first={offset}&qft=interval%3d"{interval}"&format=RSS'
31+time_range_dict = {'day': '7',
32+ 'week': '8',
33+ 'month': '9'}
29
34
30
35
31# remove click
36# remove click
@@ -46,6 +51,19 @@ def image_url_cleanup(url_string):
46 return url_string
51 return url_string
47
52
48
53
54+def _get_url(query, language, offset, time_range):
55+ if time_range in time_range_dict:
56+ search_path = search_string_with_time.format(
57+ query=urlencode({'q': query, 'setmkt': language}),
58+ offset=offset,
59+ interval=time_range_dict[time_range])
60+ else:
61+ search_path = search_string.format(
62+ query=urlencode({'q': query, 'setmkt': language}),
63+ offset=offset)
64+ return base_url + search_path
65+
66+
49# do search-request
67# do search-request
50def request(query, params):
68def request(query, params):
51 offset = (params['pageno'] - 1) * 10 + 1
69 offset = (params['pageno'] - 1) * 10 + 1
@@ -55,11 +73,7 @@ def request(query, params):
55 else:
73 else:
56 language = params['language'].replace('_', '-')
74 language = params['language'].replace('_', '-')
57
75
58− search_path = search_string.format(
76+ params['url'] = _get_url(query, language, offset, params['time_range'])
59− query=urlencode({'q': query, 'setmkt': language}),
60− offset=offset)
61−
62− params['url'] = base_url + search_path
63
77
64 return params
78 return params
65
79
tests/unit/engines/test_bing_news.py+1
@@ -12,6 +12,7 @@ class TestBingNewsEngine(SearxTestCase):
12 dicto = defaultdict(dict)
12 dicto = defaultdict(dict)
13 dicto['pageno'] = 1
13 dicto['pageno'] = 1
14 dicto['language'] = 'fr_FR'
14 dicto['language'] = 'fr_FR'
15+ dicto['time_range'] = ''
15 params = bing_news.request(query, dicto)
16 params = bing_news.request(query, dicto)
16 self.assertIn('url', params)
17 self.assertIn('url', params)
17 self.assertIn(query, params['url'])
18 self.assertIn(query, params['url'])