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中关于for循环的碎碎念
Jun 30 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Django的models中on_delete参数详解
Jul 16 Python
python递归法解决棋盘分割问题
Jul 17 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
python函数调用,循环,列表复制实例
May 03 Python
Python celery原理及运行流程解析
Jun 13 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python wordcloud库安装方法总结
Dec 31 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将向Java靠拢
2006/10/09 PHP
Zend引擎的发展 [15]
2006/10/09 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
三下乡活动心得体会
2016/01/23 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis