· 5 years ago · Jun 27, 2020, 09:50 AM
1"""
2BaiduFileTrans.py
3百度翻译文件随机翻译器
4by: Sam_Li
5"""
6# 库文件导入
7import http.client
8import hashlib
9import urllib.parse
10import random
11import json
12
13# 部分语言列表
14langs = ['en', 'jp', 'kor', 'fra', 'spa', 'th', 'ara', 'ru', 'pt', 'de', 'it', 'el', 'nl', 'pl', 'bul', 'est',
15 'dan', 'fin', 'cs', 'rom', 'slo', 'swe', 'hu', 'vie']
16# 待翻译文件名
17filename = 'text.txt'
18# 抽取语言个数
19lang_num = 20
20# 初始化文件内容列表
21file_content = list()
22
23
24def translate(q, fromlang, tolang):
25 # 这一段是百度给的例程,直接修改后搬过来用了
26 appid = 'appid' # 你的appid(这里是必填的, 从百度 开发者信息一览获取)
27 secretKey = 'secretkey' # 你的密钥(这里是必填的, 从百度 开发者信息一览获取)
28
29 httpClient = None
30 myurl = '/api/trans/vip/translate'
31 salt = random.randint(32768, 65536)
32 sign = appid + q + str(salt) + secretKey
33 m1 = hashlib.md5()
34 m1.update(sign.encode())
35 sign = m1.hexdigest()
36 myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
37 q) + '&from=' + fromlang + '&to=' + tolang + '&salt=' + str(salt) + '&sign=' + sign
38 result = ""
39 try:
40 httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
41 httpClient.request('GET', myurl)
42 # response是HTTPResponse对象
43 response = httpClient.getresponse()
44 result = response.read()
45 except Exception as e:
46 print(e)
47 finally:
48 if httpClient:
49 httpClient.close()
50
51 return json.loads(result.decode())['trans_result'][0]['dst']
52
53
54# 将文件读入列表内
55with open(filename, 'r', encoding='utf-8') as file:
56 for line in file.readlines():
57 file_content.append(line.strip())
58 else:
59 print('读入文件', filename, '成功')
60
61# 随机抽取语言
62# 可以把这里的choices改成sample,这样就是不重样的语言
63used_lang = random.choices(langs, k=lang_num)
64# 遍历文件内所有行
65for line in file_content:
66 # 判别空行
67 if not line == '':
68 # 遍历随机抽取语言列表
69 for lang in used_lang:
70 # 翻译
71 line = translate(line, 'auto', lang)
72 else:
73 # 输出翻译完成的字符串
74 print(translate(line, 'auto', 'zh'))
75 # print(trans.translate(out_line, dest='en').text)
76 else:
77 # 检测到空行后自动跳过并输出空行
78 # 用于降低调用翻译 API 次数,降低被屏蔽的风险
79 print('')
80
81# input('翻译完成,按 Enter 关闭……')