summaryrefslogtreecommitdiff
path: root/searx/engines
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarIT.de>2022-07-04 19:17:50 +0200
committerGitHub <noreply@github.com>2022-07-04 19:17:50 +0200
commitb5cceeb2f9997d3c6b460f0a1b1c691174e55c04 (patch)
treee8d6af728d9dc88475a30d0c6555a07ea558c001 /searx/engines
parent7a9beb4fa4c705c4871d753826a73ac2a4d7a423 (diff)
parent8de0b6200529182b0b7453c59d08f5fdd958965e (diff)
Merge pull request #1434 from liimee/eng-4
Adds Lingva/Google Translate engine
Diffstat (limited to 'searx/engines')
-rw-r--r--searx/engines/lingva.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/searx/engines/lingva.py b/searx/engines/lingva.py
new file mode 100644
index 000000000..bf51b705e
--- /dev/null
+++ b/searx/engines/lingva.py
@@ -0,0 +1,68 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""Lingva (alternative Google Translate frontend)"""
+
+from json import loads
+
+about = {
+ "website": 'https://lingva.ml',
+ "wikidata_id": None,
+ "official_api_documentation": 'https://github.com/thedaviddelta/lingva-translate#public-apis',
+ "use_official_api": True,
+ "require_api_key": False,
+ "results": 'JSON',
+}
+
+engine_type = 'online_dictionary'
+categories = ['general']
+
+url = "https://lingva.ml"
+search_url = "{url}/api/v1/{from_lang}/{to_lang}/{query}"
+
+
+def request(_query, params):
+ params['url'] = search_url.format(
+ url=url, from_lang=params['from_lang'][1], to_lang=params['to_lang'][1], query=params['query']
+ )
+ return params
+
+
+def response(resp):
+ results = []
+
+ result = loads(resp.text)
+ info = result["info"]
+ from_to_prefix = "%s-%s " % (resp.search_params['from_lang'][1], resp.search_params['to_lang'][1])
+
+ if "typo" in info:
+ results.append({"suggestion": from_to_prefix + info["typo"]})
+
+ if 'definitions' in info: # pylint: disable=too-many-nested-blocks
+ for definition in info['definitions']:
+ if 'list' in definition:
+ for item in definition['list']:
+ if 'synonyms' in item:
+ for synonym in item['synonyms']:
+ results.append({"suggestion": from_to_prefix + synonym})
+
+ infobox = ""
+
+ for translation in info["extraTranslations"]:
+ infobox += f"<b>{translation['type']}</b>"
+
+ for word in translation["list"]:
+ infobox += f"<dl><dt>{word['word']}</dt>"
+
+ for meaning in word["meanings"]:
+ infobox += f"<dd>{meaning}</dd>"
+
+ infobox += "</dl>"
+
+ results.append(
+ {
+ 'infobox': result["translation"],
+ 'content': infobox,
+ }
+ )
+
+ return results