吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4459|回复: 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] 纯文本查看 复制代码
# -*- 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] 纯文本查看 复制代码
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, 2024-11-16 15:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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