前置条件:nodejs环境、安装 crypto 和 python3环境
const crypto = require("crypto")
function decode(resp_data) {
g_o = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'
g_n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'
const g_o_1 = new Uint8Array(crypto.createHash('md5').update(g_o).digest())
const g_n_1 = new Uint8Array(crypto.createHash('md5').update(g_n).digest())
const cipher = crypto.createDecipheriv('aes-128-cbc', g_o_1, g_n_1)
let s = cipher.update(resp_data, 'base64', 'utf-8')
s += cipher.final("utf-8")
return s
}
python代码
python">import json
import time
from hashlib import md5
import requests
import execjs
from jsonpath import jsonpath
print("=" * 12)
print("有道翻译v1.0")
print("=" * 12)
while 1:
ch_value = input("请输入待翻译的内容 ==> ")
# 发送请求 - sign
time1 = int(time.time() * 1000)
s1 = f'client=fanyideskweb&mysticTime={time1}&product=webfanyi&key=fsdsogkndfokasodnaso'
obj = md5()
# 要加密的内容,必须传入字节
obj.update(s1.encode('utf-8'))
sign = obj.hexdigest()
url = "https://dict.youdao.com/webtranslate"
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
'referer': 'https://fanyi.youdao.com/',
'origin': 'https://fanyi.youdao.com',
'cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=648817392.8377072; OUTFOX_SEARCH_USER_ID=-1140685951@47.109.4.40; hb_MA-B0D8-94CBE089C042_source=www.baidu.com'
}
data = {
"i": ch_value,
"from": "auto",
"to": "auto",
"domain": 0,
"dictResult": "true",
"keyid": "webfanyi",
"sign": sign,
"client": "fanyideskweb",
"product": "webfanyi",
"appVersion": "1.0.0",
"vendor": "web",
"pointParam": "client,mysticTime,product",
"mysticTime": str(time1),
"keyfrom": "fanyi.web"
}
resp = requests.post(url=url, data=data, headers=headers)
# 解密
with open('./js.js') as f:
js_code = f.read()
js = execjs.compile(js_code)
ret = js.call("decode", resp.text)
translateResult_tgt = jsonpath(json.loads(ret), '$..translateResult..tgt')[0]
print("翻译的结果 ==> ", translateResult_tgt, sep='')
print("")