前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有道翻译的那些事~

有道翻译的那些事~

作者头像
周小董
发布2019-03-25 18:10:03
7650
发布2019-03-25 18:10:03
举报
文章被收录于专栏:python前行者

2017 年最新有道翻译API 解析教程

有道翻译参数
有道翻译参数

从上面接口:大概可以推测一下, 

  • i: 需要翻译的内容
  • from:
  • to:       这两个key 都为AUTO 大概猜测一下应该为自动翻译,自动检测语言并翻译

smartresult:clientdoctypeversionkeyfromtypoResult参数我们先不管,毕竟提交多次这几个值一直没有任何变化。应该是在浏览器上的一个固定值,就先别浪费时间了。

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 是用来干嘛的。

代码语言:javascript
复制
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、相关参数

代码语言:javascript
复制
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'

}

完整代码:

代码语言:javascript
复制
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基础上进行改编,仅供个人学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
机器翻译
机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档