通过参数的破解,Python实现有道翻译的实时调用。有道翻译大家都知道,算是国内翻译比较好的平台了。我们做SEO的时候,在已经伪原创的时候肯定是经常会用到中英互换的方式去实现文章。也就是之前市面上说的AI伪原创了。那么有道翻译整体是提供了一个api的接口,提供企业和个人的调用的。那么作为资深的白嫖党,肯定是不愿意掏这个钱。虽然Steven去官网看了这个api的价格,也不算贵。
但是这个不能说我们不能白嫖,我们知道有道的网页是可以免费的提供翻译的,不收费,那么我们就可以通过提供网页信息来获取我们需要的翻译的数据。那么就可以实现白嫖的行为了!
有道翻译的实时调用脚本实现原理
有道的官网网页上面是直接可以免费的翻译,那么也就是存在免费的翻译接口,而且不限次数,所以我们可以通过获取网页的响应数据来获取我们需要的内容。
有道翻译的实时调用参数破解
1、通过网页的调式工具,可以看出,网站通过post请求的,并且data数据包中,包含了一些变量是加密的。我们只要破解加密的参数就可以获取到想要的数据。
2、具体的一些变量是:i、salt、sign、ts、bv 第一个变量是搜索翻译的字符串,加密的变量是后四位。
3、通过断点调试后,发现了几个变量的构造
ts:当前13位时间戳
salt:当前13位时间戳 + 0~9的一个随机值
bv:浏览器内核的版本信息的md5值
sign: “fanyideskweb” + 搜索词 + salt + “mmbP%A-r6U3Nw(n]BjuEU” 的md5值
知道了这些加密参数后,写代码就比较简单了!
有道翻译的实时调用脚本代码
Python
# coding:utf-8
import requests,random,time
from hashlib import md5
query = '搜索词'
def youdaoFanyi(query):
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4185.0 Safari/537.36'
ts = int(time.time() * 1000)
salt = ts + random.randint(0,9)
bv = md5(ua.replace('Mozilla/','').encode(encoding='utf-8')).hexdigest()
action = random.choice(['FY_BY_CLICKBUTTION','FY_BY_REALTlME'])
sign = "fanyideskweb" + query + str(salt) + "mmbP%A-r6U3Nw(n]BjuEU"
sign_md5 = md5(sign.encode(encoding='utf-8')).hexdigest()
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'OUTFOX_SEARCH_USER_ID=1802626059@10.169.0.84; JSESSIONID=aaa2BxnbAE2hz4GjvR7lx; OUTFOX_SEARCH_USER_ID_NCOO=2045615435.9428613; ___rl__test__cookies={time}'.format(time=ts),
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': ua,
'X-Requested-With': 'XMLHttpRequest'
}
form_data = {
'i': query,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': str(salt), #r + parseInt(10 * Math.random(), 10); ts + 随机值
'sign': sign_md5, #md5("fanyideskweb" + action + salt + "mmbP%A-r6U3Nw(n]BjuEU")
'ts': str(ts) , #空格 ‘’ + 时间戳
'bv': bv, #md5(navigator.appVersion) 浏览器的agent MD5
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': action
}
response = requests.post(url,data=form_data,headers=headers)
result = response.json()
print(result)
print('\n')
fanyi = result['translateResult'][0]
print(fanyi)
print('\n')
try:
for line in fanyi:
tgt = line['tgt']
print(tgt)
except:
pass
if __name__ == '__main__':
youdaoFanyi(query)
# print(query)
效果图
Ps:当然了,其实这个只能说是一个小小的demo了,没有完完整整的优化好。这个是昨天,我乘兴晚上研究出来的,然后百度了一下。我的心态就崩了,原来早就有人研究出来,有人在网上已经公布了。。。唉。。。早知道就直接抄网上的不就完事了。。。。