免费获取谷歌翻译api

最近做的一个项目需要调用谷歌翻译的api,来将用户输入的中文文本翻译成英文。

一开始想尝试Google Cloud 给的免费的300刀的试用,但发现还需要填写纳税人号码,visa卡号等,所以果断放弃了。

所以我接下的思路是通过程序模拟浏览器去请求https://translate.google.cn/,(如下图所示),然后获取返回的Response。

分析浏览器中的请求url的构造

可以看到浏览器请求了非常多的页面,我们需要找出Response包含翻译结果的请求页面

  1. 点击红框区域,ctrl+F搜索
  2. 搜索包含我们想得到的返回结果(chinese people)的页面,即single
  3. 在页面过滤器(Filter)处输入sigle,过滤出想要的页面

可以看到请求https://translate.google.cn/translate_a/single?·······,得到的Response结果正是我们想要的。

得到 Request URL(https://translate.google.cn/translate_a/single?client=webapp&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&source=bh&ssel=0&tsel=0&kc=1&tk=238761.343585&q=%E4%B8%AD%E5%9B%BD%E4%BA%BA) 后,需要分析Request URL的构成,然后模拟这个请求。 URL由基本请求地址:https://translate.google.cn/translate_a/single和一系列参数构成,查看 From Data,可以看到一系列的参数,重点只需要关注 tk参数,因为不同的翻译词对应的tk参数是不同的。

国外的一个大神通过js来生成的tk值的代码:

function token(a) {var k = "";var b = 406644;var b1 = 3293161072;var jd = ".";var sb = "+-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, sb);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
}

通过java代码调用js脚本得到tk参数值,组合参数构建url,通过httpClient模拟浏览器,请求构建好的url,得到Response。

java代码如下:

package com.jia.utils;import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;public class HttpC2 {public static void main(String[] args) throws Exception {String from = "zh-CN";//翻译前语言String to = "en";//翻译后语言String translateText = "中国人";//翻译文本String baseUrl = "http://translate.google.cn/translate_a/single";String tk = token(translateText);String translateResult = getResponse(baseUrl,from,to,tk,translateText);System.out.println(translateResult);}public static String getResponse(String baseUrl,String from,String to,String tk,String translateText)throws Exception{Map<String, String> params = new HashMap<String, String>();params.put("client", "webapp");params.put("sl", from);params.put("tl", to);params.put("hl", "zh-CN");params.put("dt", "at");params.put("dt", "bd");params.put("dt", "ex");params.put("dt", "ld");params.put("dt", "md");params.put("dt", "qca");params.put("dt", "rw");params.put("dt", "rm");params.put("dt", "ss");params.put("dt", "t");params.put("source", "bh");params.put("ssel", "0");params.put("tsel", "0");params.put("kc", "1");params.put("tk", tk);params.put("q", translateText);CloseableHttpClient httpClient = HttpClients.createDefault();URIBuilder uri = new URIBuilder(baseUrl);for (String key : params.keySet()) {String value = params.get(key);uri.addParameter(key, value);}HttpUriRequest request = new HttpGet(uri.toString());//设置user-agentrequest.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");CloseableHttpResponse response = httpClient.execute(request);HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, "UTF-8");//System.out.println(result);result = result.substring(result.indexOf("\"")+1,result.indexOf(",")-1);//System.out.println(result);EntityUtils.consume(entity);response.getEntity().getContent().close();response.close();return result;}//调用js返回tk参数private static String token(String value) {String result = "";ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");try {FileReader reader = new FileReader("G:\\LAB614\\ideaproject\\test\\src\\main\\java\\com\\jia\\utils\\trans2.js");engine.eval(reader);if (engine instanceof Invocable) {Invocable invoke = (Invocable)engine;result = String.valueOf(invoke.invokeFunction("token", value));}} catch (Exception e) {e.printStackTrace();}return result;}
}

免费获取谷歌翻译api(Google Translate API)相关推荐

  1. 谷歌翻译代码-google translate code

    第一种: <divid="google_translate_element"></div><script>functiongoogleTrans ...

  2. Goslate: Free Google Translate API

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  3. Google Translate API

    Google Translate API 近期在做的一个任务,但是网上的资料甚少,经过了几番波折,终于弄好了.实现过程很简单,拿出来共享一下,免得大家像我一样找了半天. 谷歌翻译升级到2.0后变为收费 ...

  4. 【zz】免费的午餐——编程利用Google日历API发短信、Email

    免费的午餐--编程利用Google日历API发短信.Email Google日历是相当优秀的日程管理工具,可以方便的组织.分享各类日程,Google还提供了贴心而免费的手机短信.Email提示功能,真 ...

  5. python调用谷歌翻译英文文献pdf_Python 调用 Google Translate API 批量翻译文章

    有时候批量翻译中文文章,批量变成各个小语种的语言,手动的粘贴复制是非常慢的.需要调用翻译 API 接口,综合对比市面上的各个翻译 API,个人觉得 Google 的翻译 API 最为好用和准确. 下面 ...

  6. python 调用Google Translate API进行翻译

    调用Google 翻译API进行翻译 #!/usr/bin/python #coding: UTF-8 import sys reload(sys) sys.setdefaultencoding('u ...

  7. python 根据地址求经纬度 谷歌_利用google的API获取世界城市经纬度(python实现)

    google API 需要 --. #-*- coding: utf8 -*- from xml.dom import minidom import urllib2, urllib #这个KEY本来是 ...

  8. 如何用google translate API接口

    rootsoso 最近要做一个要用到翻译功能的插件,很自然就想到了利用 google translate 的强大,但是 google 之开放了 ajax 的 api ,没有开放语言的接口.这也不难,通 ...

  9. unity免费使用谷歌翻译(使用tk值,防止数量限制的错误)

    如果直接使用 string url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=&quo ...

  10. 教你找到免费的Google Translate API(谷歌翻译接口)+C#版的Google翻译函数

    http://www.crifan.com/teach_you_how_to_find_free_google_translate_api/ (还没试过有时间试下.....) 今日,在想要在C#中,利 ...

最新文章

  1. 让Visual Studio 也支持JS代码折叠 [ Visual Studio | #region | #endregion ]
  2. python 任务计划_windows 10 设定计划任务自动执行 python 脚本的方法
  3. python大数据分析实例-Python大数据处理案例
  4. 编写脚本隐藏托盘图标_【Electron-Playground系列】托盘篇
  5. 【必读】文案都写不好,还谈什么互联网思维
  6. javascript变量中基本类型和引用类型的详解解读
  7. mina mysql_Mina学习笔记(二)
  8. ES6语法的学习与实践
  9. MySQL数据库datetime类型不能为空值的问题
  10. java中math方法语句,下列有关Java中标准类Math的random()方法的说法中,正确的是。 - 上学吧学历考试...
  11. ASP.NET锚标记使用2种小方法
  12. 使用Kotlin的Android Toast
  13. scala练习100道解析
  14. 随手记--Windows系统下的cmd和powershell的区别
  15. 安卓手机root推荐,导出安卓分区镜像
  16. 中国兰花怎么养 中国兰花养殖方法及注意事项
  17. python日本 老龄化分析_即将读研,求问前辈有什么研究生安利的软件 APP 或者阅读文献用的等一系列提高效率的东西吗!?...
  18. mybatis 批量添加 过滤库里已有数据
  19. Office 2016安装
  20. 读 S. Meyers 之《Effective C++:改善程序与设计的55个具体做法:第3版》

热门文章

  1. Python:minicap实现快速截图
  2. newifi3 高恪魔改_原地升值?newifi 3 路由器刷入高恪固件教程
  3. i219v微星 驱动_Intel英特尔网卡驱动下载-Intel英特尔I217/I218/I219系列网卡驱动官方版下载[电脑版]-华军软件园...
  4. 程序员计算器 android6,程序员计算器
  5. echarts5.0 动态柱状图 不用调接口 不用jQuery舒适应用
  6. 最新python爬取喜马拉雅音频_Python爬虫实战案例之爬取喜马拉雅音频数据详解
  7. 艾肯声卡没有声音处理方法
  8. opera官方教程 预订一
  9. 软件开发费用评估 功能点估算法
  10. 总纲篇:产品结构设计指导VII(本博客指引章节)