Python3调谷歌翻译
公司最近有翻译的需求(本人适用的是在第三方服务器上使用,不在本地也不在谷歌控制台),发现Google的Translate API只能翻墙调,但是国内也有翻译需求,经多方查找汇集众家之长,找到一个感觉最好用的,稍稍改进了一下,
一。国内爬虫版(主要参考https://blog.csdn.net/andeyeluguo/article/details/78581590):
很多博客有提到tk值要js处理,不多说,直接上干货
首先,是要pip处理js的模块
pip install PyExecJS
创建HandleJs.py
import execjs
class Py4Js():
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)
创建main.py
import json
import urllib.request
import urllib.parse
from HandleJs import Py4Js def open_url(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(req)
data = response.read().decode('utf-8')
return data def buildUrl(content, tk, tl):
baseUrl = 'http://translate.google.cn/translate_a/single'
baseUrl += '?client=t&'
baseUrl += 'sl=auto&'
baseUrl += 'tl=' + str(tl) + '&'
baseUrl += 'hl=zh-CN&'
baseUrl += 'dt=at&'
baseUrl += 'dt=bd&'
baseUrl += 'dt=ex&'
baseUrl += 'dt=ld&'
baseUrl += 'dt=md&'
baseUrl += 'dt=qca&'
baseUrl += 'dt=rw&'
baseUrl += 'dt=rm&'
baseUrl += 'dt=ss&'
baseUrl += 'dt=t&'
baseUrl += 'ie=UTF-8&'
baseUrl += 'oe=UTF-8&'
baseUrl += 'clearbtn=1&'
baseUrl += 'otf=1&'
baseUrl += 'pc=1&'
baseUrl += 'srcrom=0&'
baseUrl += 'ssel=0&'
baseUrl += 'tsel=0&'
baseUrl += 'kc=2&'
baseUrl += 'tk=' + str(tk) + '&'
baseUrl += 'q=' + content
return baseUrl def translate(content, tk, tl):
content = urllib.parse.quote(content)
url = buildUrl(content, tk, tl) result = open_url(url)
res_json = json.loads(result)
trans_text = res_json[0][0][0]
# sl是要翻译的源语种
sl = res_json[8][0][0]
print(trans_text)
print(sl) def main():
js = Py4Js()
#content是要翻译的内容
#tl是要翻译的目标语种,值参照ISO 639-1标准,如果翻译成中文"zh/zh-CN简体中文"
content = "test"
tl = "ja"
tk = js.getTk(content)
translate(content, tk, tl) if __name__ == "__main__":
main()
二。谷歌API调用
谷歌控制台创建项目,绑定信用卡(翻译API收费),绑定项目和账号,启用Translation API,创建service account(这部分可以参考 https://blog.csdn.net/nicolelili1/article/details/76973097 的一-五),然后
首先还是pip Google translation SDK
pip install --upgrade google-cloud-translate
翻译的代码(指定credentials)
from google.cloud import translate
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('Key.json')
translate_client = translate.Client(credentials=credentials)
translation = translate_client.translate(
text,
target_language=target_lang)
print(translation)
ok啦
三。谷歌API调用
转了一大圈,发现自己走了很多弯路,此方法最为便捷,但是也有安全隐患(有明文的Key)
代码
import urllib.request
import urllib.parse
key = "**********" #你的API Key
content = urllib.parse.quote(text)
url = "https://translation.googleapis.com/language/translate/v2?key=%s&target=%s&q=%s" % (key, target_lang, content)
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf-8'))
res = data['data']['translations'][0]
print(res)
附AWS的翻译(不过目前只有3个region有这个功能):
import boto3
client = boto3.client('translate', region_name='us-east-1')
result = client.translate_text(
Text=text,
SourceLanguageCode=source_lang if source_lang else 'auto',
TargetLanguageCode=target_lang
)
参考链接:
https://blog.csdn.net/andeyeluguo/article/details/78581590
https://blog.csdn.net/nicolelili1/article/details/76973097
https://cloud.google.com/translate/docs/quickstart-client-libraries
https://googleapis.github.io/google-cloud-python/latest/translate/usage.html
http://iamct.iteye.com/blog/952558
Python3调谷歌翻译的更多相关文章
- Python3 动手自己写谷歌翻译
本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题. 没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk. 文中tk的实现是复用的网上大神的代码生成tk. 好了,不说了直接看 ...
- python爬虫调用谷歌翻译接口
2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...
- C#借助谷歌翻译实现翻译小工具(一)基本功能实现
软件效果: 实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser"肢解"谷歌翻译网站的HtmlElement元素, ...
- 免费利用网页版谷歌翻译实现任意语言转换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 ...
- 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= ...
随机推荐
- makefile编写
概述 什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefil ...
- python全栈开发 * mysql * 180828
一.mysql概述\s 查看当前自己的信息1.mysql就是用于管理我们的文件的一个软件;2.mysql有两个软件: 服务器软件: socket服务端 本地文件操作 解析指令(mysql语句) 客户端 ...
- ApiKernel
using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = System.IntPtr; ...
- 前端面试题汇总(主要为 Vue)
前端面试题汇总 1. 谈谈你对MVVM开发模式的理解 MVVM分为Model.View.ViewModel三者. 1)Model:代表数据模型,数据和业务逻辑都在Model层中定义: 2)View:代 ...
- [dev]typeof, offsetof 和container_of
转一篇文章.写的比较好,浅显易懂,还画了图. https://www.cnblogs.com/idorax/p/6796897.html 概况一下: container_of用到了typeof和off ...
- 音频 m4a 转 wav
背景 最近做智能家居,需要用到一些应答词 需要自己录制.但是在mac下面通过 QuickTime 录制的是 m4a格式.但是应答词需要 wav格式.所以就需要转化了 解决方法 # sox 不行, ff ...
- WinAPI 字符及字符串函数(5): IsCharAlpha - 是否是个字母
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- js 转java后台传过来的list
var intIndex=0; arrList = new Array(); arrList = "${orderNumList}".replace('[','').replace ...
- zlib简单使用说明(转)
1.背景:项目需要把protobuf文件压缩后再传到MQTT,于是就想到了zlib 2.zlib是提供数据压缩用的函式库,此函式库为自由软件. 3.网上下载zlib压缩包,执行如下命令,函数库就可使用 ...
- Leetcode: The Maze II
There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...