|
|
发表于 2025-7-11 12:30:10
|
显示全部楼层
回复 3# 小白龙
尝试将 from_lang='zh-CHS' 改为 'AUTO' 或 'zh',让有道自动识别源语言:- def youdao_web_translate(text, from_lang='AUTO', to_lang='en'):
复制代码 或者用下面版本:- import requests
- import time
- import random
- import hashlib
- def encrypt(signStr):
- hash_algorithm = hashlib.md5()
- hash_algorithm.update(signStr.encode('utf-8'))
- return hash_algorithm.hexdigest()
- def get_sign_and_bv(text):
- user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36"
- bv = hashlib.md5(user_agent.encode()).hexdigest()
-
- ts = str(int(time.time() * 1000))
- salt = ts + str(random.randint(0, 9))
-
- # 注意:这个密钥可能会更新!需要抓包确认
- sign_str = f"fanyideskweb{text}{salt}Ygy_4c=r#e#4EX^NUGUc5"
- sign = encrypt(sign_str)
-
- return {
- 'ts': ts,
- 'salt': salt,
- 'sign': sign,
- 'bv': bv
- }
- def translate_youdao(text, from_lang='AUTO', to_lang='en'):
- url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
-
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
- 'Referer': 'https://fanyi.youdao.com/',
- 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
- 'Cookie': 'OUTFOX_SEARCH_USER_ID=-499280993@10.168.8.63;' # 可替换为你抓包得到的 Cookie
- }
-
- payload = {
- 'i': text,
- 'from': from_lang,
- 'to': to_lang,
- 'smartresult': 'dict',
- 'client': 'fanyideskweb',
- 'salt': get_sign_and_bv(text)['salt'],
- 'sign': get_sign_and_bv(text)['sign'],
- 'ts': get_sign_and_bv(text)['ts'],
- 'bv': get_sign_and_bv(text)['bv'],
- 'doctype': 'json',
- 'version': '2.1',
- 'keyfrom': 'fanyi.web',
- 'action': 'FY_BY_CLICKBUTTION'
- }
-
- try:
- response = requests.post(url, data=payload, headers=headers)
- result = response.json()
-
- if result.get('errorCode') == 0:
- translation = ''.join([item['tgt'] for item in result['translateResult'][0]])
- return translation
- else:
- error_code = result.get('errorCode')
- error_msg = {
- 40: "无法翻译(签名无效)",
- 50: "语言不支持",
- 60: "无词典结果",
- 100: "OK",
- 101: "缺少必填参数",
- 102: "不支持的语言类型",
- 103: "查询字数超过限制",
- 104: "非法签名",
- 105: "非法客户端ID",
- 106: "非法渠道",
- 110: "访问频率受限",
- 201: "解密失败",
- 202: "签名检验失败",
- 203: "访问IP非法",
- 204: "账户认证失败",
- 205: "请求超时",
- 206: "HTTP METHOD非法",
- 207: "权限不足",
- 301: "后台服务响应错误",
- 302: "未找到指定资源",
- 303: "服务未加载",
- 401: "合作方账号无效",
- 411: "访问流量控制",
- 412: "黑名单校验失败"
- }.get(error_code, "未知错误")
-
- return f"翻译失败:{error_code} - {error_msg}"
- except Exception as e:
- return f"请求异常:{str(e)}"
- # 示例调用
- if __name__ == "__main__":
- text = "你好,世界!"
- translated = translate_youdao(text)
- print(f"原文: {text}")
- print(f"译文: {translated}")
复制代码 |
|