[mod] duckduckgo engine: better support of the language preference
After the main request, send a second to https://duckduckgo.com/t/sl_h See https://github.com/searx/searx/issues/2259
This commit is contained in:
		
							parent
							
								
									74d56f6cfb
								
							
						
					
					
						commit
						d2dac11392
					
				@ -5,7 +5,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from lxml.html import fromstring
 | 
					from lxml.html import fromstring
 | 
				
			||||||
from json import loads
 | 
					from json import loads
 | 
				
			||||||
from searx.utils import extract_text, match_language, eval_xpath
 | 
					from searx.utils import extract_text, match_language, eval_xpath, dict_subset
 | 
				
			||||||
 | 
					from searx.poolrequests import get
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# about
 | 
					# about
 | 
				
			||||||
about = {
 | 
					about = {
 | 
				
			||||||
@ -35,6 +36,7 @@ language_aliases = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# search-url
 | 
					# search-url
 | 
				
			||||||
url = 'https://html.duckduckgo.com/html'
 | 
					url = 'https://html.duckduckgo.com/html'
 | 
				
			||||||
 | 
					url_ping = 'https://duckduckgo.com/t/sl_h'
 | 
				
			||||||
time_range_dict = {'day': 'd',
 | 
					time_range_dict = {'day': 'd',
 | 
				
			||||||
                   'week': 'w',
 | 
					                   'week': 'w',
 | 
				
			||||||
                   'month': 'm'}
 | 
					                   'month': 'm'}
 | 
				
			||||||
@ -65,27 +67,27 @@ def request(query, params):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    params['url'] = url
 | 
					    params['url'] = url
 | 
				
			||||||
    params['method'] = 'POST'
 | 
					    params['method'] = 'POST'
 | 
				
			||||||
    params['data']['b'] = ''
 | 
					 | 
				
			||||||
    params['data']['q'] = query
 | 
					    params['data']['q'] = query
 | 
				
			||||||
    params['data']['df'] = ''
 | 
					    params['data']['b'] = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    region_code = get_region_code(params['language'], supported_languages)
 | 
					    region_code = get_region_code(params['language'], supported_languages)
 | 
				
			||||||
    if region_code:
 | 
					    if region_code:
 | 
				
			||||||
        params['data']['kl'] = region_code
 | 
					        params['data']['kl'] = region_code
 | 
				
			||||||
        params['cookies']['kl'] = region_code
 | 
					        params['cookies']['kl'] = region_code
 | 
				
			||||||
    if params['time_range'] in time_range_dict:
 | 
					 | 
				
			||||||
        params['data']['df'] = time_range_dict[params['time_range']]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    params['data']['df'] = time_range_dict.get(params['time_range'], '')
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# get response from search-request
 | 
					# get response from search-request
 | 
				
			||||||
def response(resp):
 | 
					def response(resp):
 | 
				
			||||||
 | 
					    # ping
 | 
				
			||||||
 | 
					    headers_ping = dict_subset(resp.request.headers, ['User-Agent', 'Accept-Encoding', 'Accept', 'Cookie'])
 | 
				
			||||||
 | 
					    get(url_ping, headers=headers_ping)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # parse the response
 | 
				
			||||||
    results = []
 | 
					    results = []
 | 
				
			||||||
 | 
					 | 
				
			||||||
    doc = fromstring(resp.text)
 | 
					    doc = fromstring(resp.text)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # parse results
 | 
					 | 
				
			||||||
    for i, r in enumerate(eval_xpath(doc, result_xpath)):
 | 
					    for i, r in enumerate(eval_xpath(doc, result_xpath)):
 | 
				
			||||||
        if i >= 30:
 | 
					        if i >= 30:
 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user