2017 年最新有道翻译API 解析教程
从上面接口:大概可以推测一下,
smartresult:
、client
、doctype
、version
、keyfrom
、typoResult
参数我们先不管,毕竟提交多次这几个值一直没有任何变化。应该是在浏览器上的一个固定值,就先别浪费时间了。
action: 判断当你是按回车提交或者点击按钮提交的方式
然后我们再看下提交的结果:
一个json 这就不用多解释什么了吧。
然后在看下salt、sign 这两个是怎么回事
salt 一看,就像是一个时间戳。 但是以往的坑基本都是时间戳然后右移几位,然后+ 随机数或者什么秘钥之类的。不过还是先把时间戳去转换一下看有什么问题。
发现salt 就是一个当前时间的时间戳,并没什么复杂的。
salt = 当前时间戳。
最后就只有一个参数了sign
然后我们找到 他的js代码中发现了一段这种代码。
md5(u + d + f + c)
我们在顺藤摸瓜找到:u d f c 到底是什么东西
d =’翻译’ #待翻译的内容 u =
fanyideskweb
# client f =str(int(time.time()*1000)) #时间戳 我这里是用的python 所以乘1000 c =”rY0D^0’nM0}g5Mm1z%1G4” 这段东西有点邪门了。一段用来加密的字符串,然而通过这段字符串找到他的加密方式是deEight("rY0D^0'nM0}g5Mm1z%1G4")
然后我们在找找这个deEight 是用来干嘛的。
deEight: function(e) {
var t, n = new Array,
r = e.split("\\");
if (1 == r.length) return r[0];
for (t = 1; t < r.length; t++) n += String.fromCharCode(parseInt(r[t], 8));
return e = n
}
然后自己在google js工具里面调用一下,发现这丫的返回的就是原值。
然后自己还是在python里面用execjs调用,但是莫名其妙出错了。弄不明白,不过说实话python 的execjs模块确实感觉不是很好用。(稍微吐槽一下)
然后根据md5的方式:md5(u + d + f + c) 这样拼接字符串 生成sign参数。
整个有道翻译的API就完成了。
1、POST 提交接口
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null
2、相关参数
data= {
'i':d, #需翻译的内容
'from':'AUTO', #应该是自动翻译还是人工
'to':'AUTO',
'smartresult':'dict',
'client':u, #客户端
'salt':f, #时间戳
'sign':m.hexdigest(), #根据数据包的内容进行的md5 加密
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_ENTER',
'typoResult':'true'
}
完整代码:
import urllib.request
import urllib.parse
import json
import time
import requests
import hashlib
while 1:
if __name__== "__main__":
m = hashlib.md5()
d = input('请输入要翻译的内容(输入“q!”退出程序):')
if d=='q!':
break
u = 'fanyideskweb'
f = str(int(time.time()*1000))
c = "rY0D^0'nM0}g5Mm1z%1G4"
m.update((u + d + f + c).encode('utf-8'))
data= {
'i':d,
'from':'AUTO',
'to':'AUTO',
'smartresult':'dict',
'client':u,
'salt':f,
'sign':m.hexdigest(),
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_ENTER',
'typoResult':'true'
}
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Origin':'http://fanyi.youdao.com/',
'Referer':'http://fanyi.youdao.com/',
}
#print(data)
post_url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null'
youdaojson = requests.post(post_url,headers = headers,data=data).json()
#print(youdaojson)
print('翻译的结果是:%s'%(youdaojson['translateResult'][0][0]['tgt']))
time.sleep(2)
运行效果如下:
本文在该链接:http://www.jianshu.com/p/e45511bcd001基础上进行改编,仅供个人学习。