前言:工作需要,翻译的文本经常带有 emoji 表情。
1. 谷歌翻译( translate & googletrans python库)
优点:方便,简单
缺点:需要翻墙,translate 库有次数限制,googletrans 库不能翻译带有 emoji 表情的文本
2. 百度翻译
注册百度翻译开发者帐号,申请 appID & 密码, 免费 200万字符/月
缺点:不能翻译带有 emoji 表情的文本,会报错
3. 有道翻译(最终选择方案)
优点:(破解接口)没有次数限制,可以翻译带有 emoji 表情的文本(不会报错)。
注意事项:翻译次数较多时,控制调用速度,不要请求过快(本人控制在 4~7s)
代码如下:
import hashlib
import json
import requests
import time
class YouDaoTrans(object):
def __init__(self):
# 翻译请求的url http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
'Cookie': 'OUTFOX_SEARCH_USER_ID=308378051@101.81.194.137; OUTFOX_SEARCH_USER_ID_NCOO=597036150.7305241; _ga=GA1.2.1037696354.1529850002; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcoBYcCnz7WD71o-z7vw; ___rl__test__cookies=1535377134467',
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com/',
'Referer': 'http://fanyi.youdao.com/',
}
def trans(self, word):
client = 'fanyideskweb'
D = 'n%A-rKaT5fb[Gy?;N5@Tj'
ts = str(time.time() * 1000)
bv = 'e9a540d982d8c0b1c2267cb741a05f8f'
salt = str(time.time()) + '1'
# salt = ts + parseInt(10 * Math.random(), 10)
# hashlib.md5: MD5加密, 接收一个二进制参数
md5_obj = hashlib.md5((client + word + salt + D).encode())
sign = md5_obj.hexdigest()
# 拼接参数, 发送post请求, 获取响应数据
data = {
"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": client,
"salt": salt,
"sign": sign,
"ts": ts,
"bv": bv,
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_CLICKBUTTION",
# "typoResult": "false"
}
response = requests.post(self.url, data=data, headers=self.headers)
content = response.content.decode()
# print('---', content)
translate_list = json.loads(content).get('translateResult')
res = ''
for trans_list in translate_list:
for trans_data in trans_list:
# print(trans_data.get('tgt'))
res += trans_data.get('tgt') + '\n'
# res += trans_data.get('tgt') + ' '
print('res:', res)
return res
if __name__ == '__main__':
word = "Sunshine no sense to me\n Internet no sense to me\n Cigarette no sense to me"
# word = "Всё качественно и быстро!"
# word = "Did you know there's a ? World Emoji Day❓ ??????Well guess what ?, today's the day❗?? #17Jul ?\n\nDownload our Telegram stickers from our official groups to celebrate! ?? TG Groups: https://t.co/FKUOdodHAm\n\nWhat's your favorite emoji? Comment below"
trans = YouDaoTrans()
trans.trans(word)
参数破解过程:
2019-07-21
------ END ------