.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
lingva.py
Go to the documentation of this file.
1# SPDX-License-Identifier: AGPL-3.0-or-later
2"""Lingva (alternative Google Translate frontend)"""
3
4from searx.result_types import EngineResults
5
6about = {
7 "website": 'https://lingva.ml',
8 "wikidata_id": None,
9 "official_api_documentation": 'https://github.com/thedaviddelta/lingva-translate#public-apis',
10 "use_official_api": True,
11 "require_api_key": False,
12 "results": 'JSON',
13}
14
15engine_type = 'online_dictionary'
16categories = ['general', 'translate']
17
18url = "https://lingva.thedaviddelta.com"
19
20
21def request(_query, params):
22 params['url'] = f"{url}/api/v1/{params['from_lang'][1]}/{params['to_lang'][1]}/{params['query']}"
23 return params
24
25
26def response(resp) -> EngineResults:
27 results = EngineResults()
28
29 result = resp.json()
30 info = result["info"]
31 from_to_prefix = "%s-%s " % (resp.search_params['from_lang'][1], resp.search_params['to_lang'][1])
32
33 if "typo" in info:
34 results.append({"suggestion": from_to_prefix + info["typo"]})
35
36 if 'definitions' in info: # pylint: disable=too-many-nested-blocks
37 for definition in info['definitions']:
38 for item in definition.get('list', []):
39 for synonym in item.get('synonyms', []):
40 results.append({"suggestion": from_to_prefix + synonym})
41
42 data = []
43
44 for definition in info['definitions']:
45 for translation in definition['list']:
46 data.append(
47 results.types.Translations.Item(
48 text=result['translation'],
49 definitions=[translation['definition']] if translation['definition'] else [],
50 examples=[translation['example']] if translation['example'] else [],
51 synonyms=translation['synonyms'],
52 )
53 )
54
55 for translation in info["extraTranslations"]:
56 for word in translation["list"]:
57 data.append(
58 results.types.Translations.Item(
59 text=word['word'],
60 definitions=word['meanings'],
61 )
62 )
63
64 if not data and result['translation']:
65 data.append(results.types.Translations.Item(text=result['translation']))
66
67 params = resp.search_params
68 results.add(
69 results.types.Translations(
70 translations=data,
71 url=f"{url}/{params['from_lang'][1]}/{params['to_lang'][1]}/{params['query']}",
72 )
73 )
74 return results
EngineResults response(resp)
Definition lingva.py:26
request(_query, params)
Definition lingva.py:21