大家都知道,以前谷歌翻译是开放免费API的,对于我们工程中即时翻译用的很方便,可是后来谷歌收费了,5555 各种不方便啊
遂 ,决定自己做个采集翻译的小工具,方便自己,也能方便大家。当然,网上的哪些所谓的方法工具都已经失效了。
先来梳理一下谷歌翻译的流程, 用抓包工具走了一遍,发现内容提交是GET方式,qurestring , 还伴有cookie,于是从抓包工具中提取GET..... HTTP/1.1 (GET /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=494883.112282&q=%E5%A6%82%E6%9E%9C HTTP/1.1)提取cookie
(_ga=GA1.3.1165698298.1450741032; NID=83=Q01ASZSQufLFnKHIdshHP5NRfGho82XPttcC58jRq0SjWrV-9vxy0sYtzxaQfKtQ2yqyAIfVY_Zmz6elJwfL3EWm-rM3JwyNMAcEiuJKkAh_Qo8cOvQxYEH7F3pYwCfV)
用fsockopen模拟浏览器试了一下,哎呦不错,直接就得到翻译的内容了,json形式的。心里一阵暗喜,居然这么简单(为啥网上还有好多人说搞不定呢)。
接着测试,继续用其他中文,哎呀,居然403错误,google不给翻译了。
仔细研究了下,发现链接中 tk 值很特殊,不知道怎么来的。然后查看了谷歌翻译的源文件,看到了一串js代码TKK=eval('((function(){var a\x3d1246737830;var b\x3d1020198760;return 408411+\x27.\x27+(a+b)})())'); 这串代码产生的值与tk有点像,但又不全像,显然这个TKK字符串还要经过运算。于是查看了一下谷歌翻译的JS文件,找到了相关的函数,还挺复杂的,这个TKK值还要与待翻译的文字一起运算才能得到 tk 值, 也就是说 tk 值 既与TKK有关也与 待翻译文字有关。而且 发现不需要cookie 。
google了一下,发现国外有牛人提取并简化 了 tk的运算函数。
- var TKK = ((function() {
- var a = 561666268;
- var b = 1526272306;
- return 406398 + '.' + (a + b);
- })());
- function b(a, b) {
- for (var d = 0; d < b.length - 2; d += 3) {
- var c = b.charAt(d + 2),
- c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
- c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
- a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
- }
- return a
- }
- function tk(a) {
- for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
- var c = a.charCodeAt(f);
- 128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
- }
- a = h;
- for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
- a = b(a, "+-3^+b+-f");
- a ^= Number(e[1]) || 0;
- 0 > a && (a = (a & 2147483647) + 2147483648);
- a %= 1E6;
- return a.toString() + "." + (a ^ h)
- }
经过测试,确实有用,能够正确算出tk 值, 只是这位仁兄直接用了固定的TKK值,而在实际中TKK是随机变的。
所以正确的流程是:
1.) get谷歌,获得TKK
2.) 算出 tk
3.) 采集翻译
我做了个demo,是JavaScript版本的,下载地址:http://pan.baidu.com/s/1dEGVoNv 提取码a4bq ; 下载地址:http://download.csdn.NET/detail/life169/9598373
其实还有个PHP版的,有为高手做了个在线实例 http://www.liuxiatool.com/t.php
文章来源:http://blog.csdn.net/life169/article/details/52153929
相关推荐
PHP对接百度翻译接口API 实现多国语言翻译
Google翻译支持-选择您要用来发布文章的语言 DeepL翻译支持–选择您要用来发布文章的语言 文本微调器支持–自动修改生成的文本,使用其同义词更改单词–内置,最佳旋转器,SpinRewriter,SpinnerChief,WordAI等–极...
二是将模型集成到移动App中,App可以直接调用API进行翻译。 此指南内容丰富,提供了大量的代码示例,并且通过数学公式解析BERT模型原理,配以图文解释,大大提升了可读性和实践性,是快速学习BERT机器翻译应用的...
3. **语言障碍**:虽然外语能力对于很多人来说是个挑战,但可以通过技术手段(如使用翻译API)来解决。 #### 二、为什么选择繁体站点作为起点? 1. **规避版权问题**:繁体站点不需要担心复杂的版权问题,减少了...
数据采集是从各种源获取原始信息,如网页、数据库、API等。预处理则包括清洗、去重和标准化等。知识抽取是识别实体和关系的过程,常用的方法有基于规则、统计学习和深度学习等。知识融合解决的是来自不同源的同名...