新闻专栏
使用 Python 的 DeepL 翻译
文本文件的第二次翻译

在本文中DeepL 翻译如何使用 API第二部分:关于文件翻译我想介绍一下。
(首次点击这里)
文件转换需要三个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=en-us
该document_id以及document_key但是,
服务器以 JSON 格式返回。
如果你用 Python 写这个过程直到发送,看起来是这样的:
URL = 'https://api.deepl.com/v2/document'
文件 = dict()
文件['file'] = open(fn, 'rb')
文件['auth_key'] = (无,get_key())
文件['target_lang'] = (无,'en-us')
Res = requests.post(URL,files=files)
auth_key 具体具体target_lang 相当 棘手。
有多种方式可以指定文件中的项,对于两项元组,
其中一个字段是文件名,两个字段是对象。
如果你指定一个字符串,它会写成这样:
以另一种方式,auth_key 和 target_lang
与第一个字符串翻译一样,将其存储在数据中(dict格式),并且
你也可以把数据和文件都传给 requests.post()。
步骤2:获取翻译处理状态
查询被翻译文件的翻译状态:
$ document_id=[documentID]
$ document_key=[documentKey]
$ 卷发 https://api.deepl.com/v2/document/${document_id} \
$ -d auth_key=${auth_key} \
$ -d document_key=${document_key}
状态为排队(接受),翻译(翻译中),
错误(发生翻译错误),完成(翻译结束)
换算时,系统还返回进程剩余时间的估计值。
参数document_id以及document_key如果您已经完成了替换,
如果你用 Python 写这个过程直到发送,看起来是这样的:
URL = f'https://api.deepl.com/v2/document/{document_id}'
data = dict()
data['auth_key'] = get_key()
data['document_key'] = document_key
res = requests.post(URL, data=data)
步骤3:下载目标语言文件
翻译状态完成 后,下载该文件:
$ curl 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 写这个过程直到发送,看起来是这样的:
URL = f'https://api.deepl.com/v2/document/{document_id}/result'
data = dict()
data['auth_key'] = get_key()
data['document_key'] = document_key
res = requests.post(URL, data=data)
文件翻译处理
最后,连接上述流程。
第二步只返回翻译的进度,所以
需要等待处理才能收到结果。 基本上:
·翻译时剩余时间为seconds_remaining
睡几秒钟,再检查一下进展。
·如果有“完成 或 错误 ”,就退出。
如果你用 Python 写上面的内容,看起来是这样的:
导入请求
import json
来自时间导入睡眠防守get_key():
返回 open('key.txt').read().rstrip()
防守upload_src(FN):
”’
文件翻译步骤1:上传原始语言文件
”’
URL = 'https://api.deepl.com/v2/document'
文件 = dict()
文件['file'] = open(fn, 'rb')
文件['auth_key'] = (无,get_key())
文件['target_lang'] = (无,'en-us')Res = requests.post(URL,files=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
后get_trans_status(document_id, document_key):
”’
第二步:获取翻译处理状态
”’
URL = f'https://api.deepl.com/v2/document/{document_id}'
data = dict()
data['auth_key'] = get_key()
data['document_key'] = document_keyres = 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:等待翻译处理
”’
而真:
res=(document_id, document_key) get_trans_status)
状态 = res['状态']
print(f'status: {status}', flush=True)
seconds_remaining = 0
if status == 'done' 或 status == 'error':
休息
Elif Status == “翻译中”:
如果在分辨率中为“seconds_remaining”:
seconds_remaining = int(res['seconds_remaining'])
# 错误避免
如果 seconds_remaining <= 0:
seconds_remaining = 10
否则:#queued,等等。
通行证
印刷(f'... 等待(另一个) {seconds_remaining}s',flush=True)
睡眠(seconds_remaining)
归还状态
def download_tgt(民名,document_id,document_key):
”’
文件翻译步骤3:下载目标语言文件
”’
URL = f'https://api.deepl.com/v2/document/{document_id}/result'
data = dict()
data['auth_key'] = get_key()
data['document_key'] = document_keyres = requests.post(URL, data=data)
res_status = res.status_code # 200(成功时)(现已不使用)
tgt_bin = res._content
其中 Open(fn, 'w', encoding='utf-8′) 为 f:
print(tgt_bin.decode('utf-8'), end=“, file=f)
防御主():
fn_src = 'test.txt'
fn_tgt = fn_src.replace('.txt', '.trans.txt')Print(f'fn_src: {fn_src}')
Print(f'fn_tgt: {fn_tgt}')打印(f'上传中:{fn_src}')
document_id,document_key = upload_src(fn_src)
status = check_proceeding(document_id, document_key)
if status == '完成':
print(f'下载中:{fn_tgt}')
download_tgt(fn_tgt,document_id,document_key)如果__name__ == '__main__':
main()
这三种类型的 API 调用处理方式类似,但
关于“用 Python 编写 curl 命令”的主题
我不敢简要总结,但我写得很冗长。
以上就是本文内容:
- 我用DeepL的API翻译文件。
·我通过表达 Python 中 curl 命令的内容创建了一个程序。
感谢阅读。