新闻专栏

本文内容DeepL 翻译如何使用 API第 2 部分:关于文件翻译我想向您介绍一下。

(首次点击这里)

 

文件翻译需要三个 API 调用的组合。
请提供带有适当日语test.txt 的文本文件 
我们将考虑一种机制将其翻译成英语(美国)并将其 保存为test.trans.txt 

 

第 1 步:上传原始语言文件

向 DeepL 服务器发出翻译请求时,请指定原始语言文件。

 

$ 卷曲 https://api.deepl.com/v2/document \
$ -F file=@test.txt \
$ -F auth_key=${auth_key} \
$ -F target_lang=zh-cn

document_iddocument_key
它以 JSON 格式从服务器返回。
如果你在 Python 中编写直到发送的进程,它看起来像这样:

 

网址 = 'https://api.deepl.com/v2/document'
文件 = dict()
文件['文件'] = 打开(fn, 'rb')
文件['auth_key'] = (无, get_key())
文件['target_lang'] = (无, 'en-us')
res = requests.post(url, files=文件)

auth_key  指定target_lang 非常棘手。
有几种方法可以指定文件中的项目,对于两项元组,
一个字段是文件名,两个字段是对象。
如果指定字符串,它将如下所示:
以另一种方式,auth_key  target_lang 
与第一个字符串翻译一样,将其存储在数据(dict 格式)中,然后
您还可以将数据和文件传递给 requests.post()。

 

第 2 步:获取翻译处理状态

查询正在翻译的文件的翻译状态:

 

$ document_id=[文档 ID]
$ document_key=[文档键]
$ 卷曲 https://api.deepl.com/v2/document/${document_id} \
$ -d auth_key=${auth_key} \
$ -d document_key=${document_key}

 

状态为排队(已接受),正在翻译(翻译),
错误(发生翻译错误),(翻译完)。
通过转换,系统还返回流程剩余时间的估计值。
变量document_iddocument_key如果您已完成替换,
如果你在 Python 中编写直到发送的进程,它看起来像这样:

 

网址 = f'https://api.deepl.com/v2/document/{document_id}'
数据 = dict()
数据['auth_key'] = get_key()
数据['document_key'] = document_key
res = requests.post(url, data=data)

第 3 步:下载目标语言文件

翻译状态完成  后,下载文件:

 

$ 卷曲 https://api.deepl.com/v2/document/${document_id}/结果 \
$ -d auth_key=${auth_key} \
$ -d document_key=${document_key} > test.trans.txt

您只能下载一次。
翻译结果test.trans.txt重定向(已保存)至
如果你在 Python 中编写直到发送的进程,它看起来像这样:

 

网址 = f'https://api.deepl.com/v2/document/{document_id}/result'
数据 = dict()
数据['auth_key'] = get_key()
数据['document_key'] = document_key
res = requests.post(url, data=data)

文件翻译处理

最后,连接上述进程。
第 2 步仅返回翻译进度,因此
需要等待处理才能收到结果。 基本上:
・翻译 ,剩余时间 seconds_remaining 
睡几秒钟,然后再次检查您的进度。
如果你完成或  错误 ,请退出循环。
如果你用 Python 写上面的内容,它看起来像这样:

 

导入请求
导入 JSON
从时间导入睡眠

def get_key() 的定义:
返回 open('key.txt').read().rstrip()

def upload_src(fn):
”’
文件翻译第 1 步:上传原始语言文件
”’
网址 = 'https://api.deepl.com/v2/document'
文件 = dict()
文件['文件'] = 打开(fn, 'rb')
文件['auth_key'] = (无, get_key())
文件['target_lang'] = (无, 'en-us')

res = requests.post(url, files=文件)
res_status = res.status_code # 200 如果成功(现在未使用)
res_text = res.text
res_data = json.loads(res_text)
document_id = res_data['document_id']
document_key = res_data['document_key']
返回document_id,document_key

def get_trans_status(document_id, document_key):
”’
第 2 步子:获取翻译处理状态
”’
网址 = f'https://api.deepl.com/v2/document/{document_id}'
数据 = dict()
数据['auth_key'] = get_key()
数据['document_key'] = document_key

res = requests.post(url, data=data)
res_status = res.status_code # 200 如果成功(现在未使用)
res_text = res.text
res_data = json.loads(res_text)
返回res_data

def check_proceeding(document_id, document_key):
”’
文件翻译第 2 步:等待翻译处理
”’
而 True:
res = get_trans_status(document_id, document_key)
状态 = res['状态']
print(f'status: {status}', flush=True)
seconds_remaining = 0
如果 status == 'done' 或 status == 'error':

elif 状态 == '翻译':
如果 res 中的 'seconds_remaining':
seconds_remaining = int(res['seconds_remaining'])
# 避免错误
如果 seconds_remaining <= 0:
seconds_remaining = 10
else:#queued 等。
通过
print(f'... 等待(另一个){seconds_remaining}s',flush=True)
睡眠(seconds_remaining)
返回状态

def download_tgt(fn, document_id, document_key):
”’
文件翻译第 3 步:下载目标语言文件
”’
网址 = f'https://api.deepl.com/v2/document/{document_id}/result'
数据 = dict()
数据['auth_key'] = get_key()
数据['document_key'] = document_key

res = requests.post(url, data=data)
res_status = res.status_code # 200 如果成功(现在未使用)
tgt_bin = res._content
使用 open(fn, 'w', encoding='utf-8') 作为 f:
打印(tgt_bin.decode('utf-8'), end=“, file=f)

def main() 中:
fn_src = 'test.txt'
fn_tgt = fn_src.replace('.txt', '.trans.txt')

打印(f'fn_src: {fn_src}')
打印(f'fn_tgt: {fn_tgt}')

print(f'上传: {fn_src}')
document_id,document_key = upload_src(fn_src)
状态 = check_proceeding(document_id, document_key)
if status == 'done':
打印(f'下载中:{fn_tgt}')
download_tgt(fn_tgt、document_id、document_key)

如果__name__ == '__main__':
main()

三种类型的 API 调用的处理方式类似,但
对于“用 Python 编写 curl 命令”的主题
我不敢概括,但我用啰嗦的方式写出来。

 

这就是本文的全部内容:

- 我使用 DeepL 的 API 来翻译文件。
・我通过用 Python 表达 curl 命令的内容创建了一个程序。

感谢您的阅读。

询价、报价请求和
在这里免费试用

招募经销商!

通过电话联系我们

[东日本] 03-6705-5720

[西日本] 06-6628-8880

接待时间:周一~周五 9:00~18:00(节假日除外)