Python 调用有道翻译接口实现翻译


Posted in Python onMarch 02, 2020

最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同。

首先来看一下网页 post 过去的数据

Python 调用有道翻译接口实现翻译 

Python 调用有道翻译接口实现翻译 

大家不难发现,我们翻译的内容是放在 post 的 data 中的,这些参数,除了 salt 和 sign 要么就是不会变化,要么就是一眼能看出来意义的;那么这个 salt 和 sign 是什么呢?salt 根据 ta 数据的特征,我们应该会想到,这应该是一个时间戳,而 sign 又是什么呢?我们一起来看一下

找到这个 js 文件,最上面这个 send 文件

Python 调用有道翻译接口实现翻译

将里面的 js 代码拷贝出来,格式化一下,搜索 sign

Python 调用有道翻译接口实现翻译 

我们发现,salt 确实是一个时间戳,但 sign 呢?,这里对 sign 的计算稍微多??录妇洌?缤迹

Python 调用有道翻译接口实现翻译 

大家发现 sign 的值,也就是 o 一共是对四个参数进行求 md5 码,两个是定值,一个是前面求到的时间戳,还有一个是什么呢?这个地方我也找了挺久的(还是不懂 js 的痛啊,哭。。。)剩下的参数,就是图片中所谓的 t

var t = e.i

然后在 data 中,大家还能发现这么一句:

i:e.i

这个 i 我们对应到 ta 发送的 data 中,不就是我们要翻译的字符串吗?哈哈哈,被我发现了吧!

发现这个就好办了,我们找出其中参数之间的关系,用Python实现 ta

Python 调用有道翻译接口实现翻译

但当我们构造好 data 兴高采烈地将数据 post 过去的时候,会发现出现报错了

Python 调用有道翻译接口实现翻译

为什么呢?难道是我们的 data 构造的有问题吗?不清楚,先尝试一下,咱们吧浏览器中的 data 拷贝进来运行一下,发现还是出错了;那么说明错误不是出在 data 上面了,那究竟是那里出了问题呢?难道 ta 还有其他的校验方式;别着急继续分析,我们再观察一下,post 请求,发现这个请求是带了 cookie的,于是我们猜测,是不是 cookie 的原因呢? 还是不清楚,我们尝试一下,将 data 对应的 cookie 加上,再运行一下。发现这次通过了,我们的猜测没错,确实是 cookie 的原因,那么这个 cookie 又是怎么来的呢?

Cookie

Python 调用有道翻译接口实现翻译 

多尝试几次,大家会发现,不同的请求内容,前面两个是不会发生改变的,而第三个,结合我们之前的经验,是不是很像一个时间戳;既然有猜测,咱们就又来尝试一下,自己构造一个 Cookie post 过去,万事大吉,哈哈哈哈。

最后附上我的代码

#/usr/bin/python 
# encoding:utf-8
# __Author__ = Slwhy

import requests
import time
import random
import hashlib
#i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10))
i = str(int(time.time()*1000)+random.randint(1,10))
#o = n.md5("fanyideskweb" + t + i + "aNPG!!u6sesA>hBAW1@(-");
t = raw_input("please input the word you want to translate:")
u = 'fanyideskweb'
l = 'aNPG!!u6sesA>hBAW1@(-'
src = u + t + i + l  # u 与 l 是固定字符串,t是你要翻译的字符串,i是之前的时间戳
m2 = hashlib.md5()
m2.update(src)
str_sent = m2.hexdigest()

''' 
  i:number
  from:AUTO
  to:AUTO
  smartresult:dict
  client:fanyideskweb
  salt:1515462554510
  sign:32ea4a33c063d174a069959a5df1a115
  doctype:json
  version:2.1
  keyfrom:fanyi.web
  action:FY_BY_REALTIME
  typoResult:false
'''
head = {
  'Accept':'application/json, text/javascript, */*; q=0.01',
  'Accept-Encoding':'gzip, deflate',
  'Accept-Language':'zh-CN,zh;q=0.9',
  'Content-Length':'200',
  'Connection':'keep-alive',
  'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
  'Host':'fanyi.youdao.com',
  'Origin':'http://fanyi.youdao.com',
  'Referer':'http://fanyi.youdao.com/',
  'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
  'X-Requested-With':'XMLHttpRequest',
  # 'Cookie': 'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; fanyi-ad-id=39535; fanyi-ad-closed=1; JSESSIONID=aaaYuYbMKHEJQ7Hanizdw; ___rl__test__cookies=1515471316884'
}
head['Cookie'] = 'OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; ___rl__test__cookies='+str(time.time()*1000)
         # '___rl__test__cookies=1515471316884'

data = {
  'i': t,
  'from':'AUTO',
  'to':'AUTO',
  'smartresult':'dict',
  'client':'fanyideskweb',
  'salt':i,
  'sign':str_sent,
  'doctype':'json',
  'version':'2.1',
  'keyfrom':'fanyi.web',
  'action':'FY_BY_REALTIME',
  'typoResult':'false'
}

s = requests.session()
# print data
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
p = s.post(url,data= data,headers = head)
print p.text

到此这篇关于Python 调用有道翻译接口实现翻译的文章就介绍到这了,更多相关Python 有道翻译内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python算法学习之桶排序算法实例(分块排序)
Dec 18 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python函数基本使用原理详解
Mar 19 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
python 实现图与图之间的间距调整subplots_adjust
May 21 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
Python MNIST手写体识别详解与试练
Nov 07 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 #Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 #Python
python mysql 字段与关键字冲突的解决方式
Mar 02 #Python
python3实现往mysql中插入datetime类型的数据
Mar 02 #Python
python3将变量写入SQL语句的实现方式
Mar 02 #Python
Python *args和**kwargs用法实例解析
Mar 02 #Python
Python通过2种方法输出带颜色字体
Mar 02 #Python
You might like
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
python中的随机函数小结
2018/01/27 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
总经理岗位职责范本
2014/02/02 职场文书
高中生操行评语
2014/04/25 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
管理失职检讨书范文
2015/05/05 职场文书
公司员工离职感言
2015/08/03 职场文书
实验室安全管理制度
2015/08/05 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Python合并多张图片成PDF
2021/06/09 Python