• 有道翻译


    关于请求

    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. 地狱;究竟(作加强语气词);训斥;黑暗势力
    ', 'vi. 过放荡生活;飞驰
    ', 'int. 该死;见鬼(表示惊奇、烦恼、厌恶、恼怒、失望等)
    '], 'type': 1}}
    

    就先这样吧

  • 相关阅读:
    Linux LAMP架构搭建
    Linux 系统版本查询
    Linux 安装本地 yum源
    Linux 虚拟机安装vmware tools
    随记分页码
    flexigrid 修改json格式
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
    web api 文档声明
    android UI
    Sending HTML Form Data
  • 原文地址:https://www.cnblogs.com/gaoyongjian/p/12099658.html
Copyright © 2020-2023  润新知