谷歌翻译接口
比較常用谷歌翻譯,現在要翻譯大量的英文,手工去做太麻煩了。想能不能調用翻譯接口實現自動。
在頁面上翻譯可以看到,谷歌翻譯頁面就是一個普通的get請求。
其中參數意思非常好懂,sl=en??源語言,??tl=zh-CN 翻譯的目標語言。除了其中一個tk參數,相當于一個密鑰。
隨便搜索一下,大神非常多。這里參考一下tk值的算法過程
https://www.52pojie.cn/thread-707169-1-1.html
// a:你要翻譯的內容 // uq:tkk的值 function vq(a,uq='422388.3876711001') {if (null !== uq)var b = uq;else {b = sq('T');var c = sq('K');b = [b(), c()];b = (uq = window[b.join(c())] || "") || ""}var d = sq('t');c = sq('k');d = [d(), c()];c = "&" + d.join("") + "=";d = b.split(".");b = Number(d[0]) || 0;for (var e = [], f = 0, g = 0; g < a.length; g++) {var l = a.charCodeAt(g);128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),e[f++] = l >> 18 | 240,e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,e[f++] = l >> 6 & 63 | 128),e[f++] = l & 63 | 128)}a = b;for (f = 0; f < e.length; f++)a += e[f],a = tq(a, "+-a^+6");a = tq(a, "+-3^+b+-f");a ^= Number(d[1]) || 0;0 > a && (a = (a & 2147483647) + 2147483648);a %= 1000000;return c + (a.toString() + "." + (a ^ b)) };/*-------------------------------------------------------------------------------- 參數:a 為你要翻譯的原文 其他外部函數: --------------------------------------------------------------------------------*/ function sq(a) {return function() {return a} }function tq(a, b) {for (var c = 0; c < b.length - 2; c += 3) {var d = b.charAt(c + 2);d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);d = "+" == b.charAt(c + 1) ? a >>> d : a << d;a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d}return a }上面大概是頁面趴下來的js代碼段。花了點時間將他轉為純java版本。
public static String getTkt(String a, String uq) {String b = uq;String c = "&tk=";String[] d = null;if(b.indexOf('.')<0) {b = "0";}else {d = b.split("\\.");b = d[0];}int f = 0;List<Long> e = new ArrayList<Long>();for (int g=0; g < a.length(); g++) {long l = a.charAt(g);if(128 > l) {e.add(l);} else if(2048 > l) {e.add(l >> 6 | 192);} else {if(55296 == (l & 64512) && g + 1 < a.length() && 56320 == (a.charAt(g + 1) & 64512)) {l = 65536 + ((l & 1023) << 10) + (a.charAt(++g) & 1023);e.add(l >> 18 | 240);e.add(l >> 12 & 63 | 128);} else {e.add(l >> 12 | 224);e.add(l >> 6 & 63 | 128);}e.add(l & 63 | 128);}}long aa = Long.parseLong(b);for (f = 0; f < e.size(); f++) {aa += e.get(f);aa = tq(aa, "+-a^+6");}aa = tq(aa, "+-3^+b+-f");aa ^= (d==null || d.length<1) ? 0 : Long.parseLong(d[1]);if(0 > aa) {aa = (aa & 2147483647l) + 2147483648l;}aa %= 1000000;return c + (Long.toString(aa) + "." + (aa ^ Long.parseLong(b)));};public static long tq(long a, String b) {for (int c = 0; c < b.length() - 2; c += 3) {char d = b.charAt(c + 2);long dd = 'a' <= d ? (byte)d - 87 : Integer.parseInt(String.valueOf(d));dd = '+' == b.charAt(c + 1) ? a >>> dd : a << dd;a = '+' == b.charAt(c) ? a + dd & 4294967295l : a ^ dd;}return a;}其中使用到tkk值,是頁面上的一個屬性,一段時間有效。這里可以定時或者調用時去壓面扒取這個屬性值。
剩下的就是拼裝請求發送請求就完事了。
完成一個jar包,測試返回如下:
擔心一段時間內請求過多,不敢太頻繁的去調用。
?
附jar包鏈接
https://download.csdn.net/download/qq_35088473/11258947
總結
- 上一篇: Java基础练习题(一维数组)
- 下一篇: 第5章 Python 数字图像处理(DI