summaryrefslogtreecommitdiff
path: root/searx/engines/lingva.py
diff options
context:
space:
mode:
authorBnyro <bnyro@tutanota.com>2024-10-15 15:39:14 +0200
committerMarkus Heiser <markus.heiser@darmarIT.de>2025-01-28 07:07:08 +0100
commit9079d0cac0156139952446f0fdc8b37b94c10756 (patch)
tree0164ae5b30d173cda9e60ea8048b16033b2029cc /searx/engines/lingva.py
parent70f1b6500861970f8b9e52fbfe52a1796350ea69 (diff)
[refactor] translation engines: common interface
Diffstat (limited to 'searx/engines/lingva.py')
-rw-r--r--searx/engines/lingva.py45
1 files changed, 28 insertions, 17 deletions
diff --git a/searx/engines/lingva.py b/searx/engines/lingva.py
index bf35deed4..ecebe4587 100644
--- a/searx/engines/lingva.py
+++ b/searx/engines/lingva.py
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Lingva (alternative Google Translate frontend)"""
-from json import loads
-
about = {
"website": 'https://lingva.ml',
"wikidata_id": None,
@@ -29,7 +27,7 @@ def request(_query, params):
def response(resp):
results = []
- result = loads(resp.text)
+ result = resp.json()
info = result["info"]
from_to_prefix = "%s-%s " % (resp.search_params['from_lang'][1], resp.search_params['to_lang'][1])
@@ -38,27 +36,40 @@ def response(resp):
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 item in definition.get('list', []):
+ for synonym in item.get('synonyms', []):
+ results.append({"suggestion": from_to_prefix + synonym})
+
+ data = []
+
+ for definition in info['definitions']:
+ for translation in definition['list']:
+ data.append(
+ {
+ 'text': result['translation'],
+ 'definitions': [translation['definition']] if translation['definition'] else [],
+ 'examples': [translation['example']] if translation['example'] else [],
+ 'synonyms': translation['synonyms'],
+ }
+ )
for translation in info["extraTranslations"]:
for word in translation["list"]:
- infobox += f"<dl><dt>{word['word']}</dt>"
-
- for meaning in word["meanings"]:
- infobox += f"<dd>{meaning}</dd>"
+ data.append(
+ {
+ 'text': word['word'],
+ 'definitions': word['meanings'],
+ }
+ )
- infobox += "</dl>"
+ if not data and result['translation']:
+ data.append({'text': result['translation']})
results.append(
{
- 'infobox': result["translation"],
- 'content': infobox,
+ 'answer': data[0]['text'],
+ 'answer_type': 'translations',
+ 'translations': data,
}
)