有道翻译
关于请求
url
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
参数
i: hello
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15772829507697
sign: f604f189cff72a34da1c49a844beed1a
ts: 1577282950769
bv: 42160534cfa82a6884077598362bbc9d
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME
参数解析
i: h # 待翻译字段
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 15772829507697 # 时间戳 + 一位随机数 (new Date).getTime()+parseInt(10 * Math.random(), 10)
sign: f604f189cff72a34da1c49a844beed1a # 加密字段
ts: 1577282950769 # 时间戳 (new Date).getTime()
bv: 42160534cfa82a6884077598362bbc9d # 加密字段 md5(navigator.appVersion)
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME # 触发方式(及时 或者 按钮)
salt的生成依赖于ts,注意时间戳的精确度
bv: JavaScript Window Navigator
sign: md5("fanyideskweb" + 待翻译文字 + salt + "n%A-rKaT5fb[Gy?;N5@Tj")
模拟请求
Content-Type:application/x-www-form-urlencoded
Referer:http://fanyi.youdao.com/
Cookie:OUTFOX_SEARCH_USER_ID_NCOO=1571439209.4880521; OUTFOX_SEARCH_USER_ID="1506839488@10.108.160.18"; ___rl__test__cookies=1577319471088
cookie中的___rl__test__cookies
是个时间戳,OUTFOX_SEARCH_USER_ID
中的@
后面的是个ip, 前面的不知道是啥
好像这三个都可以随便写,测试的时候随便写出结果了
参考代码
凑活着看吧, 如果换ua的话, bv参数估计也要换一下
import random
import requests
import time
from hashlib import md5
def get_salt():
return ts + str(random.randint(0, 9))
def get_sign(code):
return md5(("fanyideskweb" + code + salt + "n%A-rKaT5fb[Gy?;N5@Tj").encode()).hexdigest()
def get_ts():
return str(int(time.time() * 1000))
def get_bv():
return md5(
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36".encode()).hexdigest()
def get_content(code):
data = {
"i": code,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": salt,
"sign": get_sign(code),
"ts": ts,
"bv": get_bv(),
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_CLICKBUTTION"
}
res = requests.post(url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule",
data=data, headers=headers)
print(res.json())
ts = get_ts()
salt = get_salt()
headers = {
'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=34243243243; OUTFOX_SEARCH_USER_ID="2358766876@120.80.16.18"; ___rl__test__cookies=123213443242',
'Referer': 'http://fanyi.youdao.com/',
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
get_content("hell")
{'translateResult': [[{'tgt': '地狱', 'src': 'hell'}]], 'errorCode': 0, 'type': 'en2zh-CHS', 'smartResult': {'entries': ['', 'n. 地狱;究竟(作加强语气词);训斥;黑暗势力\r\n', 'vi. 过放荡生活;飞驰\r\n', 'int. 该死;见鬼(表示惊奇、烦恼、厌恶、恼怒、失望等)\r\n'], 'type': 1}}
就先这样吧