8

我正在尝试制作一个 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)
4

5 回答 5

3

在某些情况下,有必要编写一个 POST 请求,那么您应该按照以下方式进行操作(也来自 DeepL 常见问题解答):

如何避免错误 414,“Request-URI Too Long”?如果 API URL 太长并且由于 Web 服务器的长度限制,则会出现此错误。您可以通过使用 POST 请求而不是 GET 请求来避免此错误消息。

因此,您可以按如下方式使用 requests 包:

import requests

r =  requests.post(url='https://api.deepl.com/v2/translate',
                          data = {
                            'target_lang' : 'EN',  
                            'auth_key' : 'XXXXXXXXXXXXXXXXXXXX',
                            'text': 'Was ist denn los hier?'
                          })
于 2020-11-16T14:54:36.150 回答
3

编辑:DeepL Python 库

我之前没有意识到这一点,但是 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 将返回一个 jsontranslations作为其唯一的键,一个包含另一个 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 是您为响应命名的任何内容,以及获得成功请求的第一个代码块。

于 2021-06-05T22:34:47.907 回答
1

您应该添加凭据,text并将target_lang其作为参数添加到 url,例如:

https://api.deepl.com/v2/translate?auth_key=&text=Che%20bellissima%20giornata&source_lang=IT&target_lang=EN

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

于 2020-05-21T13:14:10.677 回答
1

截至 2021 年 8 月,DeepL 还为其 API 提供了一个开源 Python 客户端库:https ://github.com/DeepLcom/deepl-python 。

下面是来自自述文件的示例请求。您pip install --upgrade deepl首先需要(这里是 PyPI 中的项目:https ://pypi.org/project/deepl/ )。

import deepl

# Create a Translator object providing your DeepL API authentication key
translator = deepl.Translator("YOUR_AUTH_KEY")

# Translate text into a target language, in this case, French
result = translator.translate_text("Hello, world!", target_lang="FR")
print(result) # "Bonjour, le monde !"
于 2021-08-30T15:41:34.787 回答
1
import os    
import deepl

def translate_with_deepl(text, target_language, deepl_auth_key):
   '''translate with the (free) deepl api - you have to sign in to get 
   your authentication key'''

   translator = deepl.Translator(deepl_auth_key)
   return translator.translate_text(text, target_lang=target_language)

text = '你好'
target_language = 'EN-GB'
deepl_auth_key = os.environ.get('DEEPL_KEY') #your key in env-variables


print(translate_with_deepl(text, target_language, deepl_auth_key))
# Hello
于 2021-10-21T10:39:10.433 回答