这个想法在一年前我刚接触Stata编程的时候就有了。但是主要没办法解决的MD5算法的问题。因为我看不懂MD5加密算法。所以不得不搁置下来。终于昨天晚上我解决了这个问题······
百度翻译接口的使用
百度翻译API文档可以在这个网址上找到:通用翻译API技术文档。
http://api.fanyi.baidu.com/api/trans/product/apidoc
例如:将apple从英文翻译成中文,请求参数:
q=apple
from=en
to=zh
appid=2015063000000001
salt=1435660288
平台分配的密钥: 12345678
生成sign:
拼接字符串1:拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678
得到字符串1 =2015063000000001apple143566028812345678
计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码)
sign=md5(2015063000000001apple143566028812345678)
sign=f89f9594663708c1605f3d736d01d2d4
完整请求为:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
然后会返回一个json:
所以如果想在Stata里面实现这个过程,首先需要解决的问题就是md5加密字符串了。昨天晚上我发现了这个网站的这个功能:文字加密解密。
https://tool.lu/encdec/
事实上之前我也尝试找过一些这种网站,但是都没搞懂怎么做到的。但是这个网站很有趣。分析它的请求非常简单:
这个ajax返回的就是md5加密后的字符串。然后用curl就可以模拟了。简单分析了这个请求过程之后,发现下面的代码就可以得到“你好”的MD5加密字符串了:
temp.txt的内容为:
MD5字符串加密
所以可以首先写一个encryption.ado,这个命令可以把一个字符串加密然后将加密结果保存在返回值中:ado文件下载:http://www.czxa.top/mr/encryption.ado
示例:
这样我们就完成了第一步。
在进行下面一步之前我们需要先解决Unicode字符转中文的问题。
Unicode字符转中文
这个直接使用Stata的 函数就能完成了(上面的ado代码里面也就是使用这个函数解决的这个问题),例如:
调用百度翻译接口
至此,我已经把所有的问题解决了!然后就开始写这个翻译命令吧!再来看看这个示例接口:
为了方便,可以设定 和 参数的默认值为 ,appid我已经申请好了,我的appid是: ,大家不要乱用哈。salt是一个随机数,我们可以用 输入。然后就是sign了,它由appid+q+salt+密钥四部分加密组成,密钥我也早就申请好了,我的密钥是: 。接下来就简单了,我把这个命令取名为 。bdtrans.ado的代码如下,下载:
http://www.czxa.top/mr/bdtrans.ado
示例:
终于实现了一年前的想法!
对比测试
虽然网络状况的偶然性很大,但是还是可以看出,bdtrans效率较高,但是同时却没有dict强大:
另外再对比一下句子的翻译:
结果:
dict 虽然很快,但是它没翻译。再换个句子:
结果:
最后再介绍一些我搜罗的可以翻译的效率工具。
fanyi
这个工具的地址是:
https://github.com/afc163/fanyi
是一个python写的,可以在终端运行命令:
安装:
使用示例:
也可以简写为fy:
Alfred工具——bt
这是一个Alfred的workflows,Github地址为:
https://github.com/diegozeng/Alfred-workflow-baidu-translate
安装使用之后的效果:
wd
这个也是Python写的命令行工具,Github地址为:
https://github.com/chenjiandongx/youdao-wd
安装:
或者下载源码安装:
使用方法是:
例如:
领取专属 10元无门槛券
私享最新 技术干货