找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 4180|回复: 4

[问题求助] 用python使用有道翻译

[复制链接]
发表于 2025-7-6 17:29:19 | 显示全部楼层 |阅读模式
下面这个怎样修复?
  1. import requests
  2. import time

  3. def youdao_web_translate(text, from_lang='zh-CHS', to_lang='en'):
  4.         # -- 有道翻译网页版 URL --
  5.         url = 'https://fanyi.youdao.com/translate'
  6.         # -- 构造请求参数 --
  7.         data = {
  8.                 'i'           : text,
  9.                 'from'        : from_lang,
  10.                 'to'          : to_lang,
  11.                 'smartresult' : 'dict',
  12.                 'client'      : 'fanyideskweb',
  13.                 'salt'        : str(int(time.time() * 1000)),
  14.                 'doctype'     : 'json',
  15.                 'version'     : '2.1',
  16.                 'keyfrom'     : 'fanyi.web',
  17.                 'action'      : 'FY_BY_CLICKBUTTION'
  18.         }
  19.         # -- 设置请求头 --
  20.         headers = {
  21.                 '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',
  22.                 'Referer'    : 'https://fanyi.youdao.com/'
  23.         }
  24.         try:
  25.                 # -- 发送 POST 请求 --
  26.                 response = requests.post(url, data=data, headers=headers)
  27.                 response.raise_for_status()
  28.                 result = response.json()
  29.                 # -- 解析翻译结果 --
  30.                 if result.get('errorCode') == 0:
  31.                         translation = result['translateResult'][0][0]['tgt']
  32.                         return translation
  33.                 else:
  34.                         return f"翻译失败,错误代码:{result.get('errorCode')}"
  35.         except Exception as e:
  36.                 return f"请求失败:{str(e)}"

  37. # -- 示例调用 --
  38. text_to_translate = "你好,世界!"
  39. translated_text = youdao_web_translate(text_to_translate)
  40. print(f"原文: {text_to_translate}")
  41. print(f"译文: {translated_text}")
复制代码
发表于 2025-7-10 21:07:11 | 显示全部楼层
回复 1# 小白龙
  1. import requests
  2. import time
  3. import random
  4. import hashlib

  5. def youdao_web_translate(text, from_lang='zh-CHS', to_lang='en'):
  6.     # 生成时间戳和随机salt
  7.     ts = int(time.time() * 1000)
  8.     salt = str(ts) + str(random.randint(0, 9))
  9.    
  10.     # 生成浏览器指纹 (bv) - 对User-Agent进行MD5加密
  11.     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"
  12.     bv = hashlib.md5(user_agent.encode()).hexdigest()
  13.    
  14.     # 生成签名 (sign) - 需要密钥配合加密
  15.     secret_key = "Ygy_4c=r#e#4EX^NUGUc5"  # 注意:密钥可能会有变动
  16.     sign_str = f"fanyideskweb{text}{salt}{secret_key}"
  17.     sign = hashlib.md5(sign_str.encode()).hexdigest()
  18.    
  19.     # 请求参数
  20.     url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  21.     data = {
  22.         'i': text,
  23.         'from': from_lang,
  24.         'to': to_lang,
  25.         'smartresult': 'dict',
  26.         'client': 'fanyideskweb',
  27.         'salt': salt,
  28.         'sign': sign,
  29.         'ts': ts,
  30.         'bv': bv,
  31.         'doctype': 'json',
  32.         'version': '2.1',
  33.         'keyfrom': 'fanyi.web',
  34.         'action': 'FY_BY_CLICKBUTTION'
  35.     }
  36.    
  37.     # 请求头
  38.     headers = {
  39.         'User-Agent': user_agent,
  40.         'Referer': 'https://fanyi.youdao.com/',
  41.         'Cookie': 'OUTFOX_SEARCH_USER_ID=-1124603977@10.110.96.158;',  # 需要动态获取cookie
  42.         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  43.     }
  44.    
  45.     try:
  46.         response = requests.post(url, data=data, headers=headers, timeout=5)
  47.         response.raise_for_status()
  48.         result = response.json()
  49.         if result.get('errorCode') == 0:
  50.             return ''.join([item['tgt'] for item in result['translateResult'][0]])
  51.         else:
  52.             return f"翻译失败,错误代码:{result.get('errorCode')}"
  53.     except Exception as e:
  54.         return f"请求失败:{str(e)}"

  55. # 测试
  56. if __name__ == "__main__":
  57.     text = "你好,世界!"
  58.     print(f"原文: {text}")
  59.     print(f"译文: {youdao_web_translate(text)}")
复制代码
 楼主| 发表于 2025-7-10 23:05:46 | 显示全部楼层
回复 2# yakeyun


原文: 你好,世界!
译文: 翻译失败,错误代码:50
发表于 2025-7-11 12:30:10 | 显示全部楼层
回复 3# 小白龙

尝试将 from_lang='zh-CHS' 改为 'AUTO' 或 'zh',让有道自动识别源语言:
  1. def youdao_web_translate(text, from_lang='AUTO', to_lang='en'):
复制代码
或者用下面版本:
  1. import requests
  2. import time
  3. import random
  4. import hashlib

  5. def encrypt(signStr):
  6.     hash_algorithm = hashlib.md5()
  7.     hash_algorithm.update(signStr.encode('utf-8'))
  8.     return hash_algorithm.hexdigest()

  9. def get_sign_and_bv(text):
  10.     user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36"
  11.     bv = hashlib.md5(user_agent.encode()).hexdigest()
  12.    
  13.     ts = str(int(time.time() * 1000))
  14.     salt = ts + str(random.randint(0, 9))
  15.    
  16.     # 注意:这个密钥可能会更新!需要抓包确认
  17.     sign_str = f"fanyideskweb{text}{salt}Ygy_4c=r#e#4EX^NUGUc5"
  18.     sign = encrypt(sign_str)
  19.    
  20.     return {
  21.         'ts': ts,
  22.         'salt': salt,
  23.         'sign': sign,
  24.         'bv': bv
  25.     }

  26. def translate_youdao(text, from_lang='AUTO', to_lang='en'):
  27.     url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  28.    
  29.     headers = {
  30.         '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',
  31.         'Referer': 'https://fanyi.youdao.com/',
  32.         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  33.         'Cookie': 'OUTFOX_SEARCH_USER_ID=-499280993@10.168.8.63;'  # 可替换为你抓包得到的 Cookie
  34.     }
  35.    
  36.     payload = {
  37.         'i': text,
  38.         'from': from_lang,
  39.         'to': to_lang,
  40.         'smartresult': 'dict',
  41.         'client': 'fanyideskweb',
  42.         'salt': get_sign_and_bv(text)['salt'],
  43.         'sign': get_sign_and_bv(text)['sign'],
  44.         'ts': get_sign_and_bv(text)['ts'],
  45.         'bv': get_sign_and_bv(text)['bv'],
  46.         'doctype': 'json',
  47.         'version': '2.1',
  48.         'keyfrom': 'fanyi.web',
  49.         'action': 'FY_BY_CLICKBUTTION'
  50.     }
  51.    
  52.     try:
  53.         response = requests.post(url, data=payload, headers=headers)
  54.         result = response.json()
  55.         
  56.         if result.get('errorCode') == 0:
  57.             translation = ''.join([item['tgt'] for item in result['translateResult'][0]])
  58.             return translation
  59.         else:
  60.             error_code = result.get('errorCode')
  61.             error_msg = {
  62.                 40: "无法翻译(签名无效)",
  63.                 50: "语言不支持",
  64.                 60: "无词典结果",
  65.                 100: "OK",
  66.                 101: "缺少必填参数",
  67.                 102: "不支持的语言类型",
  68.                 103: "查询字数超过限制",
  69.                 104: "非法签名",
  70.                 105: "非法客户端ID",
  71.                 106: "非法渠道",
  72.                 110: "访问频率受限",
  73.                 201: "解密失败",
  74.                 202: "签名检验失败",
  75.                 203: "访问IP非法",
  76.                 204: "账户认证失败",
  77.                 205: "请求超时",
  78.                 206: "HTTP METHOD非法",
  79.                 207: "权限不足",
  80.                 301: "后台服务响应错误",
  81.                 302: "未找到指定资源",
  82.                 303: "服务未加载",
  83.                 401: "合作方账号无效",
  84.                 411: "访问流量控制",
  85.                 412: "黑名单校验失败"
  86.             }.get(error_code, "未知错误")
  87.             
  88.             return f"翻译失败:{error_code} - {error_msg}"
  89.     except Exception as e:
  90.         return f"请求异常:{str(e)}"

  91. # 示例调用
  92. if __name__ == "__main__":
  93.     text = "你好,世界!"
  94.     translated = translate_youdao(text)
  95.     print(f"原文: {text}")
  96.     print(f"译文: {translated}")
复制代码
 楼主| 发表于 2025-7-11 22:41:15 | 显示全部楼层
回复 4# yakeyun


   都试了, 还是不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:33 , Processed in 0.018263 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表