mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	[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
						abd9b271bc
					
				
					 1 changed files with 8 additions and 6 deletions
				
			
		|  | @ -6,7 +6,7 @@ DuckDuckGo Lite | ||||||
| 
 | 
 | ||||||
| from typing import TYPE_CHECKING | from typing import TYPE_CHECKING | ||||||
| import re | import re | ||||||
| from urllib.parse import urlencode | from urllib.parse import urlencode, quote_plus | ||||||
| import json | import json | ||||||
| import babel | import babel | ||||||
| import lxml.html | import lxml.html | ||||||
|  | @ -245,10 +245,12 @@ def request(query, params): | ||||||
| 
 | 
 | ||||||
|     # Advanced search syntax ends in CAPTCHA |     # Advanced search syntax ends in CAPTCHA | ||||||
|     # https://duckduckgo.com/duckduckgo-help-pages/results/syntax/ |     # https://duckduckgo.com/duckduckgo-help-pages/results/syntax/ | ||||||
|     query = [ |     query = " ".join( | ||||||
|         x.removeprefix("site:").removeprefix("intitle:").removeprefix("inurl:").removeprefix("filetype:") |         [ | ||||||
|         for x in query.split() |             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) |     eng_region = traits.get_region(params['searxng_locale'], traits.all_locale) | ||||||
|     if eng_region == "wt-wt": |     if eng_region == "wt-wt": | ||||||
|         # https://html.duckduckgo.com/html sets an empty value for "all". |         # https://html.duckduckgo.com/html sets an empty value for "all". | ||||||
|  | @ -261,7 +263,7 @@ def request(query, params): | ||||||
| 
 | 
 | ||||||
|     params['url'] = url |     params['url'] = url | ||||||
|     params['method'] = 'POST' |     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 |     # 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 |     # what https://html.duckduckgo.com/html does when you press "next Page" link | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Nicolas Dato
						Nicolas Dato