一、引言
彩云这个小而美的机器翻译一直很低调,它让人眼前一亮的是之前我们分享的网页翻译插件,可以把外文网站翻译成英中对照的样式,便于我们学习。之前我们也写过文章介绍过:
PythonFan:如何用Google翻译英文网页成双语对照样式6 赞同 · 5 评论文章正在上传…重新上传取消
有时我们要它翻译内容较多的文件,可以通过Python来调用它的机器翻译API,突破网页版5000字符的限制。 下面我们来介绍一下如何调用其API。
二、实现过程
第一步,我们要进入到彩云科技的主页,如果是第一次登录,就要先注册这个网站,然后再点击顶部的【在线翻译】。
在线翻译
第二步,再点击页面顶部的【翻译API】。
第三点,点击右侧的【Python调用】栏目。
Python调用
第四步,点击代码框右上解的复制按钮,复制Python的demo代码至thonny或者PyCharm等其它IDLE工具中备用。
样例代码
第五步,点击右侧【申请访问令牌】,点击【彩云科技开放平台】进入到开放平台,进行账号申请,同时可以申请彩云小译的API令牌。
第六步,进入到彩云科技开放平台,点击注册,注册账号。
注册小牛科技开放平台
第七步,点击【创建令牌】,填写应用的名称,创建令牌。
第八步,点击【令牌】下面一串字母形成的超级链接,进入到令牌令牌页面,然后可以复制令牌(就是那一串数字和字母组成的字符串),放到Python代码中的token变量的右边。
第九步,我们加入token,把整个代码放到IDLE中,或者thonny中进行调试代码。官方的代码如下:
官方代码
为了让代码可以翻译字符串,我们把原代码进行了修改。"Source"那里改为字符串, 'content-type'那里json改为txt,最后把译文直接打印出来。
import requests
import json
url = "http://api.interpreter.caiyunai.com/v1/translator"
token = "你的令牌" #这里填写你自己的令牌
payload = {
#"source" : ["Where there is a will, there is a way.",
#"ColorfulClouds Weather is the best weather service."],
"source" : "Where there is a will, there is a way.",
"trans_type" : "en2zh",
"request_id" : "demo",
}
headers = {
'content-type': "application/txt",
'x-authorization': "token " + token,
}
response = requests.request("POST", url, data=json.dumps(payload), headers=headers)
#print(response.text)
resp = json.loads(response.text)['target']
print(resp)
三、代码优化
为了更好地调用这个代码,我进一步把以上代码中的翻译功能整合成为一个函数,这样嵌入到其它的程序中会更方便,也比较符合Python程序类的写法。
以下是我把彩云小译的Python代码移植到TransExcel中,可以批量把Excel文件中的A列翻译成B列,并保存。
注意当前目录下我们需要建一个config.txt里面写上【zh|en】或者【en|zh】这是为了便于控制语言翻译的方向。
import openpyxl
import os,json
url = "http://api.interpreter.caiyunai.com/v1/translator"
token = "ayvp8cntxz5e88encfi5"
workbooks=[wb for wb in os.listdir(os.getcwd()) if wb.endswith('.xlsx')]
def lang():
with open("config.txt","r",encoding="utf-8") as f:
line=f.readlines()
from_lang,to_lang=line[0].strip().split("|")
return from_lang,to_lang
def caiyun_api(content,from_lang,to_lang):
payload = {
"source" : content,
"trans_type" : from_lang+str(2)+to_lang,
"request_id" : "demo",
}
headers = {
'content-type': "application/txt",
'x-authorization': "token " + token,
}
response = requests.request("POST", url, data=json.dumps(payload), headers=headers)
resp = json.loads(response.text)['target']
return resp
def get_lst():
from_lang,to_lang=lang()
for workbook in workbooks:
wb=openpyxl.load_workbook(workbook)
ws=wb.active
for cell0,cell1 in zip(ws['A'],ws['B']):
if cell0.value!="":
try:
cell1.value=caiyun_api(cell0.value,from_lang,to_lang)
except Exception as exc:
print(exc)
wb.save(workbook)
get_lst()
四、学后反思
- 彩云翻译还是比较良心,每个月送100万的免费翻译字符,而且翻译速度和翻译质量都还不错。
- 用Python调用API可以把Python的优势与API的功能相结合,实现多类型文件翻译和批量翻译,在不要求文本格式的情况,优化我们的翻译流程。
- 彩云小译免费额度用完后,额外购买是20元/100万字符,价格上还算优惠,也是比较良心。只是目前来看,采云小译的推广力度不够,很多人还不知道这款好用的翻译引擎。