Python3 动手自己写谷歌翻译
本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题。
没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk。
文中tk的实现是复用的网上大神的代码生成tk。
好了,不说了直接看代码吧!
# /usr/bin/env python
# -*- coding: utf- -*-
import urllib.parse
import execjs,requests,termcolor class Return_tk(): def __init__(self):
self.ctx = execjs.compile("""
function TL(a) {
var k = "";
var b = ;
var b1 = ; var jd = ".";
var $b = "+-a^+6";
var Zb = "+-3^+b+-f"; for (var e = [], f = , g = ; g < a.length; g++) {
var m = a.charCodeAt(g);
> m ? e[f++] = m : ( > m ? e[f++] = m >> | : ( == (m & ) && g + < a.length && == (a.charCodeAt(g + ) & ) ? (m = + ((m & ) << ) + (a.charCodeAt(++g) & ),
e[f++] = m >> | ,
e[f++] = m >> & | ) : e[f++] = m >> | ,
e[f++] = m >> & | ),
e[f++] = m & | )
}
a = b;
for (f = ; f < e.length; f++) a += e[f],
a = RL(a, $b);
a = RL(a, Zb);
a ^= b1 || ;
> a && (a = (a & ) + );
a %= 1E6;
return a.toString() + jd + (a ^ b)
}; function RL(a, b) {
var t = "a";
var Yb = "+";
for (var c = ; c < b.length - ; c += ) {
var d = b.charAt(c + ),
d = d >= t ? d.charCodeAt() - : Number(d),
d = b.charAt(c + ) == Yb ? a >>> d: a << d;
a = b.charAt(c) == Yb ? a + d & : 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) > :
print("翻译文本超过限制!")
return def print_result(parm):
result = parm
str_end = result.find("\",")
if str_end > :
print("翻译的结果为:",result[: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的生成封装成了类,其他的全部是用函数式编程实现。
Python3 动手自己写谷歌翻译的更多相关文章
- 免费利用网页版谷歌翻译实现任意语言转换php版
本文源发布地址: http://ourgarden.cn/2013/07/20/%E5%85%8D%E8%B4%B9%E5%88%A9%E7%94%A8%E7%BD%91%E9%A1%B5%E7%89 ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- python爬虫调用谷歌翻译接口
2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...
- C#借助谷歌翻译实现翻译小工具(一)基本功能实现
软件效果: 实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser"肢解"谷歌翻译网站的HtmlElement元素, ...
- google谷歌翻译插件-网页一键翻译
上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用 ...
- C#实现谷歌翻译API
由于谷歌翻译官方API是付费版本,本着免费和开源的精神,分享一下用C#实现谷歌翻译API的代码.这个代码非常简单,主要分两块:通过WebRequest的方式请求内容:获取Get方式的请求参数(难点在于 ...
- Asp.Net Core 实现谷歌翻译ApI 免费版
由于谷歌翻译官方API是付费版本,本着免费和开源的精神.分享一下用 Net Core 实现谷歌翻译API的代码. 项目引用的Nuget 包: ChakraCore.NET Newtonsoft.Jso ...
- c# 破解谷歌翻译
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- firefox浏览器 插件--【维基百科+谷歌翻译】高级应用之 带图翻译
[维基词典+谷歌翻译]插件地址: https://addons.mozilla.org/zh-CN/firefox/addon/google-dictionary-and-google-t/?src= ...
随机推荐
- Kemans算法及其Python 实现
算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的,相近的就 ...
- lineage 世系 血缘 容错机制 DAG
当某个RDD的部分数据丢失时候,Saprk会根据记录的世系关系找到该RDD的父RDD以及更上级的RDD.只需要将该RDD依赖的上级RDD重新计算就可以将该RDD进行恢复. Directed Acycl ...
- how to use datatables editor
Basic initialisation Editor is a Create, Read, Update and Delete (CRUD) extension forDataTables that ...
- session与cookie的理解
噶,nation同志又给我布置任务了~~是隔壁家老王提到多次的,session和cookie的运行机制问题~~于是我真的意识到一个问题,程序猿都是一个德行! 1. cookie概述 cookie 常用 ...
- Lightoj 1011 - Marriage Ceremonies
You work in a company which organizes marriages. Marriages are not that easy to be made, so, the job ...
- servlet简单例子1
servlet简单例子1 分类: servlet jsp xml2012-04-18 21:54 3646人阅读 评论(3) 收藏 举报 servletloginjspaction浏览器 LoginS ...
- I.MX6 mkuserimg.sh 使用
/*********************************************************************** * I.MX6 mkuserimg.sh 使用 * 说 ...
- 《JAVA与模式》之调停者模式
调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些 ...
- 使用ubuntu16.04配置linux内核和busybox出现错误的解决方法总结
也许很多人都知道,ARM裸机1期加强版课程用的是ubuntu 16.04,当用这个ubuntu编译内核和制作文件系统的时候会出现一些问题,售后团队用了一天时间找到了如下解决方法. 更多干货关注威信 ...
- Bootstrap指定表格字段宽度
默认情况下,表格会占据屏幕所有宽度,可以使用bootstrap的布局功能.但表格标题字段的宽度必须与相应字段内容的宽度一致. <div class="container"&g ...