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

本文内容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_id和document_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_id和document_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_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 步:等待翻译处理
”’
而 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_keyres = 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 命令的内容创建了一个程序。
感谢您的阅读。