Compare commits

..

2 Commits

Author SHA1 Message Date
Markus Heiser 127b98482c
Merge 1c9b28968d into abd9b271bc 2024-11-14 11:06:06 +01:00
Nicolas Dato abd9b271bc [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
2024-11-14 09:33:54 +01:00
1 changed files with 8 additions and 6 deletions

View File

@ -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