[fix] engine: duckduckgo - only uses first word of the search terms
during the revision in PR #3955 the query string was accidentally converted into a list of words, further the query must be quoted before POSTed in the ``data`` field, see ``urllib.parse.quote_plus`` [1] [1] https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus Closed: #4009 Co-Authored-by: @return42
This commit is contained in:
		
							parent
							
								
									dfaf5868e2
								
							
						
					
					
						commit
						35392284de
					
				@ -6,7 +6,7 @@ DuckDuckGo Lite
 | 
			
		||||
 | 
			
		||||
from typing import TYPE_CHECKING
 | 
			
		||||
import re
 | 
			
		||||
from urllib.parse import urlencode
 | 
			
		||||
from urllib.parse import urlencode, quote_plus
 | 
			
		||||
import json
 | 
			
		||||
import babel
 | 
			
		||||
import lxml.html
 | 
			
		||||
@ -245,10 +245,12 @@ def request(query, params):
 | 
			
		||||
 | 
			
		||||
    # Advanced search syntax ends in CAPTCHA
 | 
			
		||||
    # https://duckduckgo.com/duckduckgo-help-pages/results/syntax/
 | 
			
		||||
    query = [
 | 
			
		||||
        x.removeprefix("site:").removeprefix("intitle:").removeprefix("inurl:").removeprefix("filetype:")
 | 
			
		||||
        for x in query.split()
 | 
			
		||||
    ]
 | 
			
		||||
    query = " ".join(
 | 
			
		||||
        [
 | 
			
		||||
            x.removeprefix("site:").removeprefix("intitle:").removeprefix("inurl:").removeprefix("filetype:")
 | 
			
		||||
            for x in query.split()
 | 
			
		||||
        ]
 | 
			
		||||
    )
 | 
			
		||||
    eng_region = traits.get_region(params['searxng_locale'], traits.all_locale)
 | 
			
		||||
    if eng_region == "wt-wt":
 | 
			
		||||
        # https://html.duckduckgo.com/html sets an empty value for "all".
 | 
			
		||||
@ -261,7 +263,7 @@ def request(query, params):
 | 
			
		||||
 | 
			
		||||
    params['url'] = url
 | 
			
		||||
    params['method'] = 'POST'
 | 
			
		||||
    params['data']['q'] = query
 | 
			
		||||
    params['data']['q'] = quote_plus(query)
 | 
			
		||||
 | 
			
		||||
    # The API is not documented, so we do some reverse engineering and emulate
 | 
			
		||||
    # what https://html.duckduckgo.com/html does when you press "next Page" link
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user