Beispiel #1
0
class YouDao(object):

    def __init__(self):
        self.url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
        self.ua = UserAgent().random
        '''
        每次翻译cookie都发生了改变,最后___rl__test__cookies为当前时间戳
        '''
        self.headers = {
            'Host': 'fanyi.youdao.com',
            'Origin': 'http://fanyi.youdao.com',
            'Referer': 'http: // fanyi.youdao.com /',
            'User-Agent': self.ua,
            'Cookie': '[email protected]; JSESSIONID=aaaPvXVSth-S5dKortRgx; OUTFOX_SEARCH_USER_ID_NCOO=1717349831.5539143; ___rl__test__cookies=' + str(int(time.time() * 1000))
        }

    def payload(self, before, lan):
        # 请求体改变的就ts,bv,sign,salt,i
        # ts为当前时间戳
        # bv为浏览器ua的hash值
        # i 为需要翻译的内容
        # salt 为时间戳 + 10以内的随机整数
        # sign为 'fanyideskweb' + 翻译内容 + i + 'Nw(nmmbP%A-r6U3EUn]Aj'的hash值,可在fanyi.min.js中找到
        r = str(int(time.time() * 1000))
        i = r + str(int(random.random()*10))
        sign = hashlib.md5(("fanyideskweb" + before + i +
                            "Nw(nmmbP%A-r6U3EUn]Aj").encode('utf-8')).hexdigest()
        return {
            'i': before,
            'from': 'AUTO',
            'to': lan,
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': i,
            'sign': sign,
            'ts': r,
            'bv': hashlib.md5(self.ua.encode('utf-8')).hexdigest(),
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME'
        }

    def translate(self, before, lan):
        resp = requests.post(
            self.url, headers=self.headers, data=self.payload(before, lan))
        ret_dict = json.loads(resp.text)
        print(ret_dict)
        print(f'{before}')
        print(ret_dict['translateResult'][0][0]['tgt'])