[fix] bing paging and language support

see https://msdn.microsoft.com/en-us/library/ff795620.aspx for bing
specific search operators

closes #755
This commit is contained in:
Adam Tauber 2016-11-07 22:30:20 +01:00
parent 7d26b3f8f8
commit 16ff8d06c7
2 changed files with 5 additions and 12 deletions

View File

@ -32,18 +32,13 @@ search_string = 'search?{query}&first={offset}'
def request(query, params): def request(query, params):
offset = (params['pageno'] - 1) * 10 + 1 offset = (params['pageno'] - 1) * 10 + 1
if params['language'] == 'all': if params['language'] != 'all':
language = 'en-US' query = 'language:{} {}'.format(params['language'].split('_')[0].upper(), query)
else:
language = params['language'].replace('_', '-')
search_path = search_string.format( search_path = search_string.format(
query=urlencode({'q': query, 'setmkt': language}), query=urlencode({'q': query}),
offset=offset) offset=offset)
params['cookies']['SRCHHPGUSR'] = \
'NEWWND=0&NRSLT=-1&SRCHLANG=' + language.split('-')[0]
params['url'] = base_url + search_path params['url'] = base_url + search_path
return params return params

View File

@ -14,14 +14,12 @@ class TestBingEngine(SearxTestCase):
params = bing.request(query, dicto) params = bing.request(query, dicto)
self.assertTrue('url' in params) self.assertTrue('url' in params)
self.assertTrue(query in params['url']) self.assertTrue(query in params['url'])
self.assertTrue('language%3AFR' in params['url'])
self.assertTrue('bing.com' in params['url']) self.assertTrue('bing.com' in params['url'])
self.assertTrue('SRCHHPGUSR' in params['cookies'])
self.assertTrue('fr' in params['cookies']['SRCHHPGUSR'])
dicto['language'] = 'all' dicto['language'] = 'all'
params = bing.request(query, dicto) params = bing.request(query, dicto)
self.assertTrue('SRCHHPGUSR' in params['cookies']) self.assertTrue('language' not in params['url'])
self.assertTrue('en' in params['cookies']['SRCHHPGUSR'])
def test_response(self): def test_response(self):
self.assertRaises(AttributeError, bing.response, None) self.assertRaises(AttributeError, bing.response, None)