summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBnyro <bnyro@tutanota.com>2024-01-05 18:15:42 +0100
committerAlexandre Flament <alex@al-f.net>2024-01-07 11:18:16 +0100
commit3dea7e609bac72d4a129979ba15315b966ff020f (patch)
tree65feb678e3388c74628fe4b63420c5614f0ed262
parent621e1313aff3c1fd7b6cc789d34311b11f877f43 (diff)
[feat] autocompleter: implementation of stract (beta)
-rw-r--r--docs/dev/search_api.rst2
-rw-r--r--searx/autocomplete.py28
-rw-r--r--searx/settings.yml2
3 files changed, 27 insertions, 5 deletions
diff --git a/docs/dev/search_api.rst b/docs/dev/search_api.rst
index 13858ae9..56272d34 100644
--- a/docs/dev/search_api.rst
+++ b/docs/dev/search_api.rst
@@ -69,7 +69,7 @@ Parameters
``autocomplete`` : default from :ref:`settings search`
[ ``google``, ``dbpedia``, ``duckduckgo``, ``mwmbl``, ``startpage``,
- ``wikipedia``, ``swisscows``, ``qwant`` ]
+ ``wikipedia``, ``stract``, ``swisscows``, ``qwant`` ]
Service which completes words as you type.
diff --git a/searx/autocomplete.py b/searx/autocomplete.py
index 58655e26..49e1eaa6 100644
--- a/searx/autocomplete.py
+++ b/searx/autocomplete.py
@@ -6,7 +6,7 @@
# pylint: disable=use-dict-literal
import json
-from urllib.parse import urlencode
+from urllib.parse import urlencode, quote_plus
import lxml
from httpx import HTTPError
@@ -16,17 +16,26 @@ from searx.engines import (
engines,
google,
)
-from searx.network import get as http_get
+from searx.network import get as http_get, post as http_post
from searx.exceptions import SearxEngineResponseException
-def get(*args, **kwargs):
+def update_kwargs(**kwargs):
if 'timeout' not in kwargs:
kwargs['timeout'] = settings['outgoing']['request_timeout']
kwargs['raise_for_httperror'] = True
+
+
+def get(*args, **kwargs):
+ update_kwargs(**kwargs)
return http_get(*args, **kwargs)
+def post(*args, **kwargs):
+ update_kwargs(**kwargs)
+ return http_post(*args, **kwargs)
+
+
def brave(query, _lang):
# brave search autocompleter
url = 'https://search.brave.com/api/suggest?'
@@ -145,6 +154,18 @@ def seznam(query, _lang):
]
+def stract(query, _lang):
+ # stract autocompleter (beta)
+ url = f"https://stract.com/beta/api/autosuggest?q={quote_plus(query)}"
+
+ resp = post(url)
+
+ if not resp.ok:
+ return []
+
+ return [suggestion['raw'] for suggestion in resp.json()]
+
+
def startpage(query, sxng_locale):
"""Autocomplete from Startpage. Supports Startpage's languages"""
lui = engines['startpage'].traits.get_language(sxng_locale, 'english')
@@ -223,6 +244,7 @@ backends = {
'mwmbl': mwmbl,
'seznam': seznam,
'startpage': startpage,
+ 'stract': stract,
'swisscows': swisscows,
'qwant': qwant,
'wikipedia': wikipedia,
diff --git a/searx/settings.yml b/searx/settings.yml
index 61756187..c00ab10f 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -24,7 +24,7 @@ search:
# Filter results. 0: None, 1: Moderate, 2: Strict
safe_search: 0
# Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "yandex", "mwmbl",
- # "seznam", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off
+ # "seznam", "startpage", "stract", "swisscows", "qwant", "wikipedia" - leave blank to turn it off
# by default.
autocomplete: ""
# minimun characters to type before autocompleter starts