python调用有道接口

代码摘录如下
仅供学习

import json
import random
import time
import hashlib
import requests
import re
import os
from urllib import parse
from urllib import request


def trans(content):
    # 等待用户输入需要翻译的单词
    i = content
    # 有道翻译的url链接
    url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    # 构造有道的加密参数
    client = "fanyideskweb"
    ts = int(time.time() * 1000)
    salt = str(ts + random.randint(1, 10))
    flowerStr = "n%A-rKaT5fb[Gy?;N5@Tj"
    sign = hashlib.md5((client + i + salt + flowerStr).encode('utf-8')).hexdigest()
    bv = '53539dde41bde18f4a71bb075fcf2e66'
    # 创建Form_Data字典,存储请求体
    Form_Data = {}
    # 需要翻译的文字
    Form_Data['i'] = i
    # 下面这些都先按照我们之前抓包获取到的数据
    Form_Data['from'] = 'AUTO'
    Form_Data['to'] = 'AUTO'
    Form_Data['smartresult'] = 'dict'
    Form_Data['client'] = client
    Form_Data['salt'] = salt
    Form_Data['sign'] = sign
    Form_Data['ts'] = ts
    Form_Data['bv'] = bv
    Form_Data['doctype'] = 'json'
    Form_Data['version'] = '2.1'
    Form_Data['keyfrom'] = 'fanyi.web'
    Form_Data['action'] = 'FY_BY_REALTIME'
    Form_Data['typoResult'] = 'false'
    # 对数据进行字节流编码处理
    data = parse.urlencode(Form_Data).encode('utf-8')
    # 创建Request对象
    req = request.Request(url=url, data=data, method='POST')
    # 写入header信息
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36')
    req.add_header('cookie', 'OUTFOX_SEARCH_USER_ID=-352392290@116.136.20.84')
    req.add_header('Referer', 'http://fanyi.youdao.com/')
    # 传入创建好的Request对象
    response = request.urlopen(req, timeout=5)
    # 读取信息并进行字节流解码
    html = response.read().decode('utf-8')
    print(html)
    # 把返回来的json字符串解析成字典
    translate_results = json.loads(html)
    # 打印翻译结果
    translate_result = translate_results["translateResult"][0][0]['tgt']
    print("翻译的结果是:%s" % translate_result)
    return translate_result


trans('Hey, how are you')


def copy(file, file2):
    for root, dirs, files in os.walk(file):
        # 遍历文件
        for f in files:
            time.sleep(random.random())
            file_path = os.path.join(root, f)
            fi = open(file_path, 'r', encoding='utf-8')
            fi2 = open(os.path.join(file2, f), 'w', encoding='utf-8')
            while True:
                line = fi.readline()
                if line.startswith("C_"):
                    line = re.sub(r'([\w\s]+)\|([^|]+)([.\s]+)',
                                  lambda m: m.group(1) + '|' + trans(m.group(2)) + m.group(3), line)
                fi2.write(line)
                if not line:
                    fi.close()
                    fi2.close()
                    print(f)
                    break


posted @ 2019-10-16 17:02  AmosAlbert  阅读(104)  评论(0编辑  收藏  举报