最近公司有需求,需要调用谷歌翻译的接口。虽然我最后可以勉强实现了翻译的功能,但还是把这个方法记录下来供各位参考。
首先声明,我这种实现方法只能翻译少量的内容,如果同时翻译太多就会报异常。
1.找到谷歌翻译,通过f12查看谷歌翻译的时候调用的接口:https://translate.google.cn/translate_a/single?client=t&sl=auto&tl=en&hl=zhCN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF8&oe=UTF8&ssel=0&tsel=3&kc=0&tk=80338.476099&q=%E4%BB%96%E4%BB%AC%E8%BF%99%E6%A0%B7%E8%AF%B4
解析开来就是:client=t、sl=auto、tl=toLanguage、hl=fromLanguage、da=at、dt=bd、dt=ex、dt=ld、dt=gca、dt=rw、dt=rm、dt=ss、dt=t、ie=UTF8、oe=UTF8、ssel=0、tsel=3、kc=0、tk=(需要经过js文件的计算)、q=(需要翻译的文字)
这么多参数中只有tk参数最麻烦,需要使用经过js文件的计算得到,js文件我会在文章最后面分享。
2.使用jsoup模拟浏览器发送请求,接收到返回信息并解析返回信息,得到翻译的结果。
public static String TranslateGoogleString(String transalteContente,String fromLanguage,String toLanguage){ StringBuilder url=new StringBuilder(); url.append("https://translate.google.cn/translate_a/single?").append("client=t&sl=").append(fromLanguage) .append("&tl=").append(toLanguage).append("&hl=zh-CN").append("&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw") .append("&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=2&ssel=0&tsel=0&kc=1&tk=").append(token(transalteContente)).append("&q=") .append(transalteContente); System.out.println(url); //获取请求连接 Connection con = Jsoup.connect(url.toString()); //请求头设置,特别是cookie设置(这些参数在f12都可以kanda) con.header("Accept", "*/*"); con.header("Content-Type", "application/json; charset=UTF-8"); con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); con.header("Cookie", ""); //解析请求结果 Document doc; try { doc = con.ignoreContentType(true).get(); String result = doc.body().text().split(",")[0].replace("[[[", "").replace("\"", ""); //获取翻译后的内容 System.out.println(result); //返回内容 return Base64.encodeBase64String(result.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
private static String token(String text) {//获取tk参数的值 String tk = ""; ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); try { FileReader reader = new FileReader(ConfigUtil.getString("GoogleJs")); /* FileReader reader = new FileReader("E:/codes/java2/psmedia-btcnews/src/main/webapp/gmphtml/js/Google.js");*/ engine.eval(reader); if (engine instanceof Invocable) { Invocable invoke = (Invocable)engine; tk = String.valueOf(invoke.invokeFunction("token", text)); } } catch (Exception e) { e.printStackTrace(); } return tk; }Google.js文件分享:链接:https://pan.baidu.com/s/13HCY0T3BvI9zwQNEzyq0Yw 密码:pow2