Merge pull request #623 from a01200356/duckduckgo
[fix] multilingual duckduckgo
This commit is contained in:
		
						commit
						8f2a3d241f
					
				| @ -11,13 +11,12 @@ | |||||||
|  @parse       url, title, content |  @parse       url, title, content | ||||||
| 
 | 
 | ||||||
|  @todo        rewrite to api |  @todo        rewrite to api | ||||||
|  @todo        language support |  | ||||||
|               (the current used site does not support language-change) |  | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from urllib import urlencode | from urllib import urlencode | ||||||
| from lxml.html import fromstring | from lxml.html import fromstring | ||||||
| from searx.engines.xpath import extract_text | from searx.engines.xpath import extract_text | ||||||
|  | from searx.languages import language_codes | ||||||
| 
 | 
 | ||||||
| # engine dependent config | # engine dependent config | ||||||
| categories = ['general'] | categories = ['general'] | ||||||
| @ -39,13 +38,28 @@ def request(query, params): | |||||||
|     offset = (params['pageno'] - 1) * 30 |     offset = (params['pageno'] - 1) * 30 | ||||||
| 
 | 
 | ||||||
|     if params['language'] == 'all': |     if params['language'] == 'all': | ||||||
|         locale = 'en-us' |         locale = None | ||||||
|     else: |     else: | ||||||
|         locale = params['language'].replace('_', '-').lower() |         locale = params['language'].split('_') | ||||||
|  |         if len(locale) == 2: | ||||||
|  |             # country code goes first | ||||||
|  |             locale = locale[1].lower() + '-' + locale[0].lower() | ||||||
|  |         else: | ||||||
|  |             # tries to get a country code from language | ||||||
|  |             locale = locale[0].lower() | ||||||
|  |             lang_codes = [x[0] for x in language_codes] | ||||||
|  |             for lc in lang_codes: | ||||||
|  |                 lc = lc.split('_') | ||||||
|  |                 if locale == lc[0]: | ||||||
|  |                     locale = lc[1].lower() + '-' + lc[0].lower() | ||||||
|  |                     break | ||||||
| 
 | 
 | ||||||
|  |     if locale: | ||||||
|         params['url'] = url.format( |         params['url'] = url.format( | ||||||
|         query=urlencode({'q': query, 'kl': locale}), |             query=urlencode({'q': query, 'kl': locale}), offset=offset) | ||||||
|         offset=offset) |     else: | ||||||
|  |         params['url'] = url.format( | ||||||
|  |             query=urlencode({'q': query}), offset=offset) | ||||||
| 
 | 
 | ||||||
|     return params |     return params | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -11,16 +11,12 @@ class TestDuckduckgoEngine(SearxTestCase): | |||||||
|         query = 'test_query' |         query = 'test_query' | ||||||
|         dicto = defaultdict(dict) |         dicto = defaultdict(dict) | ||||||
|         dicto['pageno'] = 1 |         dicto['pageno'] = 1 | ||||||
|         dicto['language'] = 'fr_FR' |         dicto['language'] = 'de_CH' | ||||||
|         params = duckduckgo.request(query, dicto) |         params = duckduckgo.request(query, dicto) | ||||||
|         self.assertIn('url', params) |         self.assertIn('url', params) | ||||||
|         self.assertIn(query, params['url']) |         self.assertIn(query, params['url']) | ||||||
|         self.assertIn('duckduckgo.com', params['url']) |         self.assertIn('duckduckgo.com', params['url']) | ||||||
|         self.assertIn('fr-fr', params['url']) |         self.assertIn('ch-de', params['url']) | ||||||
| 
 |  | ||||||
|         dicto['language'] = 'all' |  | ||||||
|         params = duckduckgo.request(query, dicto) |  | ||||||
|         self.assertIn('en-us', params['url']) |  | ||||||
| 
 | 
 | ||||||
|     def test_response(self): |     def test_response(self): | ||||||
|         self.assertRaises(AttributeError, duckduckgo.response, None) |         self.assertRaises(AttributeError, duckduckgo.response, None) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Adam Tauber
						Adam Tauber