diff options
Diffstat (limited to 'searx/engines/translated.py')
| -rw-r--r-- | searx/engines/translated.py | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/searx/engines/translated.py b/searx/engines/translated.py index 190707a95..632e3d2e1 100644 --- a/searx/engines/translated.py +++ b/searx/engines/translated.py @@ -3,6 +3,10 @@ """ +import urllib.parse + +from searx.result_types import Translations + # about about = { "website": 'https://mymemory.translated.net/', @@ -15,8 +19,8 @@ about = { engine_type = 'online_dictionary' categories = ['general', 'translate'] -url = 'https://api.mymemory.translated.net/get?q={query}&langpair={from_lang}|{to_lang}{key}' -web_url = 'https://mymemory.translated.net/en/{from_lang}/{to_lang}/{query}' +api_url = "https://api.mymemory.translated.net" +web_url = "https://mymemory.translated.net" weight = 100 https_support = True @@ -24,27 +28,32 @@ api_key = '' def request(query, params): # pylint: disable=unused-argument + + args = {"q": params["query"], "langpair": f"{params['from_lang'][1]}|{params['to_lang'][1]}"} if api_key: - key_form = '&key=' + api_key - else: - key_form = '' - params['url'] = url.format( - from_lang=params['from_lang'][1], to_lang=params['to_lang'][1], query=params['query'], key=key_form - ) + args["key"] = api_key + + params['url'] = f"{api_url}/get?{urllib.parse.urlencode(args)}" return params def response(resp): - json_resp = resp.json() - text = json_resp['responseData']['translatedText'] + results = [] + data = resp.json() + + args = { + "q": resp.search_params["query"], + "lang": resp.search_params.get("searxng_locale", "en"), # ui language + "sl": resp.search_params['from_lang'][1], + "tl": resp.search_params['to_lang'][1], + } - alternatives = [match['translation'] for match in json_resp['matches'] if match['translation'] != text] - translations = [{'text': translation} for translation in [text] + alternatives] + link = f"{web_url}/search.php?{urllib.parse.urlencode(args)}" + text = data['responseData']['translatedText'] - result = { - 'answer': translations[0]['text'], - 'answer_type': 'translations', - 'translations': translations, - } + examples = [f"{m['segment']} : {m['translation']}" for m in data['matches'] if m['translation'] != text] + + item = Translations.Item(text=text, examples=examples) + Translations(results=results, translations=[item], url=link) - return [result] + return results |