如何向 deepL API 发出 python 请求?

Luc*_*tto 6 python translation request deepl

我正在尝试制作一个 python 脚本来使用 DeepL API 进行翻译。我尝试发出请求,但它响应 HTTP 错误 400(错误请求)。

这是我的脚本代码,我用以下代码替换了真正的身份验证密钥XXX

import requests

url = "https://api.deepl.com"

auth_key = {
    'host' : "https://api.deepl.com/v2/translate?",
    'auth_key':"auth_key=XXX"
}

querystring = {
    "text" : "Che bellissima giornata",
    "target_lang" : "en"
}

response = requests.request("POST", url, headers=auth_key, data=querystring)

print(response)
print(response.text)
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 7

编辑:DeepL Python 库

\n

我之前没有意识到这一点,但 DeepL 有一个 python 包,可以用来比通过包更容易地进行文本和文档翻译requests。其中一些内容是从 DeepL 文档中回收的,但已更新以回答您的问题。

\n

首先,运行一个简单的pip install deepl.

\n

如果您不关心对 auth_key 进行硬编码,您可以像这样设置:

\n
import deepl\n\ntranslator = deepl.Translator("auth_key")\n
Run Code Online (Sandbox Code Playgroud)\n

要翻译单个字符串,您可以这样做:

\n
import deepl\n\nresult = translator.translate_text("Che bellissima giornata", target_lang="EN-US")\nprint(result)\n
Run Code Online (Sandbox Code Playgroud)\n

现在,您还可以通过将字符串放入列表中来在 DeepL 请求中传递多个字符串:

\n
import deepl\n\nresult = translator.translate_text(["\xe3\x81\x8a\xe5\x85\x83\xe6\xb0\x97\xe3\x81\xa7\xe3\x81\x99\xe3\x81\x8b\xef\xbc\x9f", "Che bellissima giornata"], target_lang="EN-US")\nprint(result[0].text)  # "How are you?"\nprint(result[0].detected_source_lang)  # "JA"\nprint(result[1].text)  # "What a beautiful day"\nprint(result[1].detected_source_lang)  # "IT"\n
Run Code Online (Sandbox Code Playgroud)\n

如果您有完整的外语文档想要翻译,您也可以使用 DeepL 包提出请求:

\n
translator.translate_document_from_filepath(\n    "path/to/write/to/WhatABeautifulDay.docx", # Translated File\n    "path/to/original/CheBellissimaGiornata.docx", # Original File\n    target_lang="EN-US"\n)\n
Run Code Online (Sandbox Code Playgroud)\n

顺便说一句,DeepL“EN”选项已弃用,您现在必须在请求中使用“EN-US”或“EN-GB”。

\n
\n

已过时(仍然适用于文本)

\n

为了获得正确的响应,您需要按如下方式构建查询:

\n
import requests\nr = requests.post(\n                url="https://api.deepl.com/v2/translate",\n                data={\n                    "target_lang": "EN",\n                    "auth_key": auth_key,\n                    "text": string_to_translate,\n                },\n            )\n
Run Code Online (Sandbox Code Playgroud)\n

auth_key您的身份验证密钥在哪里,string_to_translate您要翻译的文本在哪里。

\n

我使用black格式化了上面的代码,这就是为什么它看起来与dwightkschruteIII包含的内容不同,尽管它本质上做的是相同的事情。

\n

但是,要使用 python 访问此翻译,您需要使用以下代码:

\n

r.json()["translations"][0]["text"]

\n

因为 DeepL 将返回一个 json 作为translations其唯一的键,并包含另一个 json 作为相应值的列表。列表中的 json 有两个键:detected_source_languagetext。这是一个详细的解释,所以我提供了下面的示例:

\n

命令:

\n
sample = requests.post(url="https://api.deepl.com/v2/translate", data={"target_lang": "EN", "auth_key": auth_key, "text": "Che bellissima giornata"})\n\nprint(sample.json())\n
Run Code Online (Sandbox Code Playgroud)\n

返回:

\n
{\'translations\': [{\'detected_source_language\': \'IT\', \'text\': \'What a beautiful day\'}]}\n
Run Code Online (Sandbox Code Playgroud)\n

因此,重申一下,您必须使用sample.json()["translations"][0]["text"]来访问翻译,其中示例是您为响应命名的任何内容,以及获得成功请求的第一个代码块。

\n


cle*_*ens 1

您应该将凭据添加texttarget_langurl 的参数,例如:

https://api.deepl.com/v2/translate?auth_key=&text=Che%20bellissima%20giornata&source_lang=IT&target_lang=EN
Run Code Online (Sandbox Code Playgroud)

DeepL 提供了用于创建示例请求的工具:请参阅如何为 API 请求创建 URL 示例?https://www.deepl.com/pro-faq.html