吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4801|回复: 5
收起左侧

[Python 转载] Python调用有道翻译接口

  [复制链接]
a121bc 发表于 2019-10-2 10:21
两个接口都发了,网上流传的translate和translate_o的都可以调用,对ip有次数限制,多次会被封,建议使用ip连接池
第一个调用translate接口,使用了ip连接池proxy_pool-master(github上有),需要Linux装SSDB,速度好慢;当然也可以不用,去掉proxies参数即可,只不过会出现验证码,但是速度极佳。
第二个调用translate_o接口,两个接口似乎是独立的,验证码不相关。
业务代码主要是读取文件夹下的所有txt文件根据正则翻译指定内容,再输出到另一个文件夹下(只是为了汉化游戏而已,学Java的第一次写python,写的不好,请大家多多指点),
大部分代码都是网上整理的,salt部分根据网站js进行了更新,应该最近还可用。

[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# -*- coding: UTF-8 -*-import hashlib
import random
import requests
import time
import re
import os
 
##################################
def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").json()
 
def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
 
# your spider code
 
def getHtml(s, url, headers, data):
    # ....
    while True:
        retry_count = 2
        proxy = get_proxy().get("proxy")
        while retry_count > 0:
            try:
                # resp = s.post(self.url, headers=self.headers, data=data)
                html = s.post(url, headers=headers,data=data , proxies={"http": "http://{}".format(proxy)}, timeout=1)
                # 使用代{过}{滤}理访问
                return html.json()
            except Exception:
                 
                retry_count -= 1
                print('代{过}{滤}理不通, 剩余机会:'+ str(retry_count))
        # 出错5次, 删除代{过}{滤}理池中代{过}{滤}理
        delete_proxy(proxy)
        print('删除代{过}{滤}理'+proxy)
    return None
 
##################################
 
s = requests.Session()
m = hashlib.md5()
class Dict:
    def __init__(self):
        self.headers = {
            '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',
            'Referer': 'http://fanyi.youdao.com/',
            'contentType': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie': 'OUTFOX_SEARCH_USER_ID=-352392290@116.136.20.84; P_INFO=a121bc; OUTFOX_SEARCH_USER_ID_NCOO=710017829.1902944; JSESSIONID=aaaDa3sqezCDY-snjj91w; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies='+str(int(time.time() * 1000))
        }
        self.url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom='
        self.base_config()
 
    def base_config(self):
        """
        设置基本的参数,cookie
        """
        s.get('http://fanyi.youdao.com/')
 
    def translate(self,e):
        # i = "With what? I'll be out with my Mom at an expo for the next few days, but..."
        i = e
        self.headers['Content-Length']=str(233+len(e))
        ts = str(int(time.time() * 1000))
        salf = ts + str(random.randint(0, 9))
        n = 'fanyideskweb' + i + salf + "n%A-rKaT5fb[Gy?;N5@Tj"
        m.update(n.encode('utf-8'))
        sign = m.hexdigest()
        data = {
            'i': i,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': salf,
            'sign': sign,
            'ts': ts,
            'bv': '53539dde41bde18f4a71bb075fcf2e66',
            'doctype': 'json',
            'version': "2.1",
            'keyfrom': "fanyi.web",
            'action': "FY_BY_REALTlME"
        }
 
        ##########################################
         
        # resp = s.post(self.url, headers=self.headers, data=data)
        # rt = resp.json()
        rt = getHtml(s, self.url, self.headers, data)
 
        ####################
         
        arr = []
        for c in rt['translateResult'][0]:
            arr.append(c['tgt'])
        return ''.join(arr)
 
# dic = Dict()
# resp = dic.translate('hello girl')
# print(resp)
 
 
# 遍历文件夹
def copy(file, file2):
    for root, dirs, files in os.walk(file):
        # 遍历文件
        for f in files:
            # time.sleep(random.random())
            print(f)
            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_"):
                    dic = Dict()
                    line = re.sub(r'([\w\s]+)\|([^|]+)([.\s]+)',lambda m: m.group(1)+'|'+dic.translate(m.group(2))+m.group(3),line)
                    print('翻译成功:'+ line)
                fi2.write(line)
                if not line:
                    fi.close()
                    fi2.close()
                    break
 
copy("C:\\Users\\Administrator\\Desktop\\python-test\\dialogues","C:\\Users\\Administrator\\Desktop\\python-test\\def")


第二个

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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, Mrs. Juliana! Yeah, like a baby. What are you up to?')
 
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
 
# copy("C:\\Users\\Administrator\\Desktop\\python-test\\dialogues","C:\\Users\\Administrator\\Desktop\\python-test\\def")

免费评分

参与人数 3吾爱币 +5 热心值 +3 收起 理由
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tiptop2728 + 1 + 1 用心讨论,共获提升!
奥斯特 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

goldli 发表于 2019-10-2 10:50
支持了。
HuanInJa 发表于 2019-10-2 20:13
https://github.com/crud-boy/py-reptile-collection/tree/master/%E8%B0%B7%E6%AD%8C%E7%BF%BB%E8%AF%91

这里有个谷歌翻译,无ip次数限制,就是限制文字个数5000
 楼主| a121bc 发表于 2019-10-3 09:29
HuanInJa 发表于 2019-10-2 20:13
https://github.com/crud-boy/py-reptile-collection/tree/master/%E8%B0%B7%E6%AD%8C%E7%BF%BB%E8%AF%91
...

这个很棒,但是和有道一样,翻译的都不太好,有百度的吗,大神?
mikeee 发表于 2019-10-15 16:34
a121bc 发表于 2019-10-3 09:29
这个很棒,但是和有道一样,翻译的都不太好,有百度的吗,大神?

百度、搜狗、谷歌、有道、qq、小牛任君选择 https://github.com/ffreemt
cj13888 发表于 2019-10-16 08:58
学习借鉴一下,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-20 22:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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