网易首页 > 网易号 > 正文 申请入驻

Python3 动手自己写谷歌翻译

0
分享至

本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题。

没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk。

文中tk的实现是复用的网上大神的代码生成tk。

好了,不说了直接看代码吧!

# /usr/bin/env python
# -*- coding: utf-8 -*-
import urllib.parse
import execjs,requests,termcolor
class Return_tk():
def __init__(self):
self.ctx = execjs.compile("""
function TL(a) {
var k = "";
var b = 406644;
var b1 = 3293161072;
var jd = ".";
var $b = "+-a^+6";
var Zb = "+-3^+b+-f";
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var m = a.charCodeAt(g);
128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023),
e[f++] = m >> 18 | 240,
e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224,
e[f++] = m >> 6 & 63 | 128),
e[f++] = m & 63 | 128)
}
a = b;
for (f = 0; f < e.length; f++) a += e[f],
a = RL(a, $b);
a = RL(a, Zb);
a ^= b1 || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return a.toString() + jd + (a ^ b)
};
function RL(a, b) {
var t = "a";
var Yb = "+";
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2),
d = d >= t ? d.charCodeAt(0) - 87 : Number(d),
d = b.charAt(c + 1) == Yb ? a >>> d: a << d;
a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
}
return a
}
""")
def getTk(self, text):
return self.ctx.call("TL", text)
def open_url(url):
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
req = requests.get(url=url, headers=headers)
return req.content.decode('utf-8')
def max_length(content):
if len(content) > 4891:
print("翻译文本超过限制!")
return
def print_result(parm):
result = parm
str_end = result.find("\",")
if str_end > 4:
print("翻译的结果为:",result[4:str_end])
def en_to_zn_translate(content, tk):
max_length(content)
content = urllib.parse.quote(content)
#英译汉
url = "http://translate.google.cn/translate_a/single?client=t" \
"&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca" \
"&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1" \
"&srcrom=0&ssel=0&tsel=0&kc=2&tk=%s&q=%s" % (tk, content)
result = open_url(url)
print_result(result)
def zn_to_en_translate(content,tk):
max_length(content)
content = urllib.parse.quote(content)
#汉译英
url = "http://translate.google.cn/translate_a/single?client=t"\
"&sl=zh-CN&tl=en&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca"\
"&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8"\
"&source=btn&ssel=3&tsel=3&kc=0&tk=%s&q=%s"%(tk,content)
result = open_url(url)
print_result(result)
def main():
js = Return_tk()
while True:
print(termcolor.colored("请先输入要进行的操作:q表示退出;e表示英文翻译成中文;z表示中文翻译成英文。","red"))
change = input("请选择翻译选项:")
if change == 'q':
break
elif change == 'e':
content = input("请输入要翻译的英文:")
tk = js.getTk(content)
en_to_zn_translate(content,tk)
elif change == 'z':
content = input("请输入要翻译的中文:")
tk = js.getTk(content)
zn_to_en_translate(content,tk)
else:
print("请输入正确的选项!")
main()

总结:

从代码上来看,写的比较简洁,没有高大上的写法,只是单纯的实现一个功能。

除了tk的生成封装成了类,其他的全部是用函数式编程实现。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
抢先看 支付宝大楼换上新Logo:无比简洁

抢先看 支付宝大楼换上新Logo:无比简洁

搞笑的阿万
2024-04-24 08:05:00
纪云浩前途尽毁!涉嫌学历造假、荣誉造假,父亲身份疑似遭曝光

纪云浩前途尽毁!涉嫌学历造假、荣誉造假,父亲身份疑似遭曝光

叶公子
2024-04-24 20:45:23
求锤得锤:英国将非法移民驱逐至卢旺达!并宣布进入战时模式

求锤得锤:英国将非法移民驱逐至卢旺达!并宣布进入战时模式

项鹏飞
2024-04-24 15:51:01
老美不敢干的事德国先做了?柏林宣布:将永久停止向中国提供优惠

老美不敢干的事德国先做了?柏林宣布:将永久停止向中国提供优惠

世态言凉
2024-04-24 16:07:26
日本的恐惧:中国已悄然改变了对日本的策略!

日本的恐惧:中国已悄然改变了对日本的策略!

星辰故事屋
2024-04-24 13:45:41
25张难得一见的精彩照片,你没见过的世界,看后眼界都提高了

25张难得一见的精彩照片,你没见过的世界,看后眼界都提高了

农人老寓
2024-04-23 19:55:20
4月24日俄乌最新:第115旅不战而退,乌军王牌血战Ocheretyne

4月24日俄乌最新:第115旅不战而退,乌军王牌血战Ocheretyne

西楼饮月
2024-04-24 09:18:02
纪云浩被免职后续:央媒发声,其家庭情况被扒,跨级提拔引热议

纪云浩被免职后续:央媒发声,其家庭情况被扒,跨级提拔引热议

180°视角
2024-04-24 12:00:10
已确认:全部遇难

已确认:全部遇难

家在栖霞
2024-04-24 20:29:44
苏纳克宣布“有史以来最大规模军援”!英国军工业转入战时状态

苏纳克宣布“有史以来最大规模军援”!英国军工业转入战时状态

鹰眼Defence
2024-04-24 16:47:10
余承东称对比测试发现华为智能驾驶系统优于特斯拉FSD,马斯克:特斯拉FSD很快进入中国【附自动驾驶行业现状分析】

余承东称对比测试发现华为智能驾驶系统优于特斯拉FSD,马斯克:特斯拉FSD很快进入中国【附自动驾驶行业现状分析】

前瞻网
2024-04-24 18:51:10
广东男子勇救落水儿童,收下贵香烟遭热议:家长误以为其分文不取

广东男子勇救落水儿童,收下贵香烟遭热议:家长误以为其分文不取

辉哥说动漫
2024-04-24 21:35:57
20位省级政府“一把手”的特别身份

20位省级政府“一把手”的特别身份

政知新媒体
2024-04-24 16:01:25
BIS向美企发出警告信 要求向600余家中国公司断供

BIS向美企发出警告信 要求向600余家中国公司断供

爱集微
2024-04-24 16:24:44
“如果再重来一次,我永远不会送孩子到这个地方”

“如果再重来一次,我永远不会送孩子到这个地方”

中国新闻周刊
2024-04-24 20:38:01
商务部贸易救济局负责人就欧盟突击检查中国企业在欧办公室答记者问

商务部贸易救济局负责人就欧盟突击检查中国企业在欧办公室答记者问

界面新闻
2024-04-24 20:24:51
开鲁县再发声!春耕不能停,费用仍得交,这次真错怪纪云浩了!

开鲁县再发声!春耕不能停,费用仍得交,这次真错怪纪云浩了!

古希腊掌管松饼的神
2024-04-24 10:03:40
萨日娜:结婚34年只生孩子不做饭,帅气演员丈夫把她宠成宝

萨日娜:结婚34年只生孩子不做饭,帅气演员丈夫把她宠成宝

娱乐白名单
2024-04-23 12:43:46
周琦公开道歉:对李金效深表歉意 下意识反应不是有意 愿承担后果

周琦公开道歉:对李金效深表歉意 下意识反应不是有意 愿承担后果

厝边人侃体育
2024-04-24 21:22:29
万达集团创始人王健林宣布退出公司并将全部股权转让给中国儒意

万达集团创始人王健林宣布退出公司并将全部股权转让给中国儒意

鹏飞深文
2024-04-22 12:19:28
2024-04-25 01:12:49
测试帮日记
测试帮日记
将技术娱乐化
275文章数 706关注度
往期回顾 全部

科技要闻

特斯拉被爆大量毁约应届生 友商"在线抢人"

头条要闻

赵本山之子已在本山传媒集团任总裁助理 透露父亲近况

头条要闻

赵本山之子已在本山传媒集团任总裁助理 透露父亲近况

体育要闻

足智多谋的哈姆,温水里的青蛙

娱乐要闻

方媛带两女儿参加婚礼,当花童超可爱

财经要闻

居民气价确实在涨,多地正普遍发生

汽车要闻

这灯效我能看半小时 奥迪Q6L e-tron有备而来

态度原创

家居
教育
手机
公开课
军事航空

家居要闻

光影之间 空间暖意打造生活律动

教育要闻

习题做不够?·多练多熟·技巧自然有

手机要闻

耐用战神 OPPO K12 手机发布:充电五分钟通话十小时,1799 元起

公开课

睡前进食会让你发胖吗?

军事要闻

时隔5年土耳其或首部署俄制防空系统

无障碍浏览 进入关怀版