Browse Source

Merge pull request #2309 from return42/fix-392

[fix] engine ddg: quote !bangs in a request send to ddg
Markus Heiser 2 years ago
parent
commit
464e69665c
1 changed files with 13 additions and 0 deletions
  1. 13 0
      searx/engines/duckduckgo.py

+ 13 - 0
searx/engines/duckduckgo.py

@@ -6,6 +6,7 @@ DuckDuckGo Lite
 """
 
 from typing import TYPE_CHECKING
+import re
 from urllib.parse import urlencode
 import json
 import babel
@@ -15,6 +16,7 @@ from searx import (
     network,
     locales,
     redislib,
+    external_bang,
 )
 from searx import redisdb
 from searx.utils import (
@@ -197,6 +199,17 @@ ddg_lang_map = {
 
 def request(query, params):
 
+    # quote ddg bangs
+    query_parts = []
+    # for val in re.split(r'(\s+)', query):
+    for val in re.split(r'(\s+)', query):
+        if not val.strip():
+            continue
+        if val.startswith('!') and external_bang.get_node(external_bang.EXTERNAL_BANGS, val[1:]):
+            val = f"'{val}'"
+        query_parts.append(val)
+    query = ' '.join(query_parts)
+
     eng_region = traits.get_region(params['searxng_locale'], traits.all_locale)
     # eng_lang = get_ddg_lang(traits, params['searxng_locale'])