如何向Depth L API发出一个python请求?

2022-04-05 00:00:00 python translation request deepl

问题描述

我正在尝试创建一个用于使用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_languagetext。这是一个冗长的解释,所以我提供了以下示例:

命令:

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是您为响应命名的任何名称,并且是获得成功请求的第一个代码块。

相关文章