Browse Source

[mod] add deepl translation engine

This implements the Deepl Translation engine. It works nearly like lingva but
directly to the deepl API.  This api only needs a to-lang, from-lang is a fake
by now.

There is a free option to use [1].

[1] https://www.deepl.com/pro-api?cta=header-pro-api for registering a free account.
Thomas Renard 2 years ago
parent
commit
d4acbcfe63
2 changed files with 71 additions and 0 deletions
  1. 62 0
      searx/engines/deepl.py
  2. 9 0
      searx/settings.yml

+ 62 - 0
searx/engines/deepl.py

@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""Deepl translation engine"""
+
+from json import loads
+
+about = {
+    "website": 'https://deepl.com',
+    "wikidata_id": 'Q43968444',
+    "official_api_documentation": 'https://www.deepl.com/docs-api',
+    "use_official_api": True,
+    "require_api_key": True,
+    "results": 'JSON',
+}
+
+engine_type = 'online_dictionary'
+categories = ['general']
+
+url = 'https://api-free.deepl.com/v2/translate'
+api_key = None
+
+
+def request(_query, params):
+    '''pre-request callback
+
+    params<dict>:
+
+    - ``method`` : POST/GET
+    - ``headers``: {}
+    - ``data``: {}  # if method == POST
+    - ``url``: ''
+    - ``category``: 'search category'
+    - ``pageno``: 1  # number of the requested page
+    '''
+
+    params['url'] = url
+    params['method'] = 'POST'
+    params['data'] = {'auth_key': api_key, 'text': params['query'], 'target_lang': params['to_lang'][1]}
+
+    return params
+
+
+def response(resp):
+    results = []
+    result = loads(resp.text)
+    translations = result['translations']
+
+    infobox = "<dl>"
+
+    for translation in translations:
+        infobox += f"<dd>{translation['text']}</dd>"
+
+    infobox += "</dl>"
+
+    results.append(
+        {
+            'infobox': 'Deepl',
+            'content': infobox,
+        }
+    )
+
+    return results

+ 9 - 0
searx/settings.yml

@@ -1626,6 +1626,15 @@ engines:
     engine: seznam
     engine: seznam
     disabled: true
     disabled: true
 
 
+  # - name: deepl
+  #   engine: deepl
+  #   shortcut: dpl
+  #   # You can use the engine using the official stable API, but you need an API key
+  #   # See: https://www.deepl.com/pro-api?cta=header-pro-api
+  #   api_key: ''  # required!
+  #   timeout: 5.0
+  #   disabled: true
+
   - name: mojeek
   - name: mojeek
     shortcut: mjk
     shortcut: mjk
     engine: xpath
     engine: xpath