如何向Depth L API发出一个python请求?
问题描述
我正在尝试创建一个用于使用DeepL API进行翻译的Python脚本。我已尝试发出请求,但它响应了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)
解决方案
编辑:DeepL Python Library
我以前没有意识到这一点,但是DeepL有一个可以用来进行文本和文档翻译的Python包,它比通过requests
包要容易得多。其中一些内容是从DeepL文档中回收的,但已更新以回答您的问题。
首先,运行简单的pip install deepl
。
如果您不关心对auth_key进行硬编码,可以这样设置:
import deepl
translator = deepl.Translator("auth_key")
要翻译单个字符串,您可以执行以下操作:
import deepl
result = translator.translate_text("Che bellissima giornata", target_lang="EN-US")
print(result)
您现在还可以通过将字符串放在列表中来在DeepL请求中传递多个字符串:
import deepl
result = translator.translate_text(["お元気ですか?", "Che bellissima giornata"], target_lang="EN-US")
print(result[0].text) # "How are you?"
print(result[0].detected_source_lang) # "JA"
print(result[1].text) # "What a beautiful day"
print(result[1].detected_source_lang) # "IT"
如果您有想要翻译的完整外语文档,也可以使用DeepL包提出请求:
translator.translate_document_from_filepath(
"path/to/write/to/WhatABeautifulDay.docx", # Translated File
"path/to/original/CheBellissimaGiornata.docx", # Original File
target_lang="EN-US"
)
仅作为附注,DeepL";en";选项已弃用,您现在必须在请求中使用";en-US";或";en-GB";。
过时(仍适用于文本)
为了获得正确的响应,您需要按如下方式组织查询:
import requests
r = requests.post(
url="https://api.deepl.com/v2/translate",
data={
"target_lang": "EN",
"auth_key": auth_key,
"text": string_to_translate,
},
)
其中auth_key
是您的身份验证密钥,string_to_translate
是要翻译的文本。
我使用black格式化了上面的代码,这就是它看起来与dwightkschruteIII包含的代码不同的原因,尽管它实际上做的是相同的事情。
但是,要使用python访问此翻译,您需要使用以下代码:
r.json()["translations"][0]["text"]
因为DeepL将返回一个以translations
为唯一键的json,并返回一个包含另一个json作为相应值的列表。列表中的json有两个键:detected_source_language
和text
。这是一个冗长的解释,所以我提供了以下示例:
命令:
sample = requests.post(url="https://api.deepl.com/v2/translate", data={"target_lang": "EN", "auth_key": auth_key, "text": "Che bellissima giornata"})
print(sample.json())
返回:
{'translations': [{'detected_source_language': 'IT', 'text': 'What a beautiful day'}]}
重申一下,您必须使用sample.json()["translations"][0]["text"]
访问翻译,其中Sample是您为响应命名的任何名称,并且是获得成功请求的第一个代码块。
相关文章