谷歌翻译接口

本文解析了谷歌翻译网页版的API调用方法,详细介绍了如何通过解析tk参数实现自动翻译,包括tk参数的计算算法及其Java实现。此外,还讨论了如何封装此功能为jar包,以供大量英文文本的自动化翻译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较常用谷歌翻译,现在要翻译大量的英文,手工去做太麻烦了。想能不能调用翻译接口实现自动。

在页面上翻译可以看到,谷歌翻译页面就是一个普通的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.youkuaiyun.com/download/qq_35088473/11258947

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值