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)
我之前没有意识到这一点,但 DeepL 有一个 python 包,可以用来比通过包更容易地进行文本和文档翻译requests。其中一些内容是从 DeepL 文档中回收的,但已更新以回答您的问题。
首先,运行一个简单的pip install deepl.
如果您不关心对 auth_key 进行硬编码,您可以像这样设置:
\nimport deepl\n\ntranslator = deepl.Translator("auth_key")\nRun Code Online (Sandbox Code Playgroud)\n要翻译单个字符串,您可以这样做:
\nimport deepl\n\nresult = translator.translate_text("Che bellissima giornata", target_lang="EN-US")\nprint(result)\nRun Code Online (Sandbox Code Playgroud)\n现在,您还可以通过将字符串放入列表中来在 DeepL 请求中传递多个字符串:
\nimport 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"\nRun Code Online (Sandbox Code Playgroud)\n如果您有完整的外语文档想要翻译,您也可以使用 DeepL 包提出请求:
\ntranslator.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)\nRun Code Online (Sandbox Code Playgroud)\n顺便说一句,DeepL“EN”选项已弃用,您现在必须在请求中使用“EN-US”或“EN-GB”。
\n已过时(仍然适用于文本)
\n为了获得正确的响应,您需要按如下方式构建查询:
\nimport 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 )\nRun Code Online (Sandbox Code Playgroud)\nauth_key您的身份验证密钥在哪里,string_to_translate您要翻译的文本在哪里。
我使用black格式化了上面的代码,这就是为什么它看起来与dwightkschruteIII包含的内容不同,尽管它本质上做的是相同的事情。
\n但是,要使用 python 访问此翻译,您需要使用以下代码:
\nr.json()["translations"][0]["text"]
因为 DeepL 将返回一个 json 作为translations其唯一的键,并包含另一个 json 作为相应值的列表。列表中的 json 有两个键:detected_source_language和text。这是一个详细的解释,所以我提供了下面的示例:
命令:
\nsample = 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())\nRun Code Online (Sandbox Code Playgroud)\n返回:
\n{\'translations\': [{\'detected_source_language\': \'IT\', \'text\': \'What a beautiful day\'}]}\nRun Code Online (Sandbox Code Playgroud)\n因此,重申一下,您必须使用sample.json()["translations"][0]["text"]来访问翻译,其中示例是您为响应命名的任何内容,以及获得成功请求的第一个代码块。
您应该将凭据添加text为target_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