Java 破解谷歌翻译 免费 api 调用

来源:互联网 发布:flash 素材源码 编辑:程序博客网 时间:2024/05/29 18:32

在公司大佬的指点下, 写了个破解谷歌翻译的工具类,能破解谷歌翻译, 思路如下:

1 获取 tkk
2 根据 tkk,和 输入内容 获取 tk
3 根据 word,tk ,组装 url 访问 谷歌翻译 api

调用如下:

public static void main(String[] args) {        /*GoogleApi googleApi = new GoogleApi();*/        GoogleApi googleApi = new GoogleApi("122.224.227.202", 3128);        String result = googleApi.translate("Many applications within the enterprise domain ", "", "zh");        System.out.println(result);    }

输出:

企业领域内的许多应用程序

代码如下

package org.trans;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.net.URLEncoder;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import org.apache.commons.lang3.StringUtils;import com.alibaba.fastjson.JSONArray;public class GoogleApi {    private static final String PATH = "/gettk.js";    static ScriptEngine engine = null;    private Browser browser = null;    static{        ScriptEngineManager maneger = new ScriptEngineManager();        engine = maneger.getEngineByName("javascript");        FileInputStream fileInputStream = null;        Reader scriptReader = null;        try{            scriptReader = new InputStreamReader(GoogleApi.class.getResourceAsStream(PATH), "utf-8");            engine.eval(scriptReader);        }catch(Exception e){            e.printStackTrace();        }finally{            if(fileInputStream != null){                try {                    fileInputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if(scriptReader != null){                try {                    scriptReader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }    public GoogleApi(){        this.browser = new Browser();    }    public GoogleApi(String ip, Integer port){        this.browser = new Browser();        this.browser.setProxy(ip, port);    }    public String getTKK(){        browser.setUrl("https://translate.google.cn/");        try{            String result = browser.executeGet();            if(StringUtils.isNotBlank(result)){                if(result.indexOf("TKK") > -1){                    String tkk = result.split("TKK")[1];                    tkk = tkk.split("\\)\\;")[0];                    tkk = tkk + ");";                    tkk = tkk.substring(1, tkk.length());                    ScriptEngineManager manager = new ScriptEngineManager();                    ScriptEngine engine = manager.getEngineByName("javascript");                    return (String) engine.eval(tkk);                }            }        }catch(Exception e){            e.printStackTrace();        }        return null;    }    public static String getTK(String word, String tkk){        String result = null;        try{            if (engine instanceof Invocable){                Invocable invocable = (Invocable) engine;                result = (String) invocable.invokeFunction("tk", new Object[]{word, tkk});            }        }catch(Exception e){            e.printStackTrace();        }        return result;    }    public String translate(String word, String from, String to){        if(StringUtils.isBlank(word)){            return null;        }        String _tkk = getTKK();        if(StringUtils.isBlank(_tkk)){            return null;        }        String _tk = getTK(word, _tkk);        try{            word = URLEncoder.encode(word, "UTF-8");        }catch(Exception e){            e.printStackTrace();        }        StringBuffer buffer = new StringBuffer("https://translate.google.cn/translate_a/single?client=t");        buffer.append("&sl=" + from);        buffer.append("&tl=" + to);        buffer.append("&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&kc=0");        buffer.append("&tk=" + _tk);        buffer.append("&q=" + word);        browser.setUrl(buffer.toString());        try{            String result = browser.executeGet();            JSONArray array = (JSONArray) JSONArray.parse(result);            JSONArray r_array = array.getJSONArray(0);            StringBuffer r_buffer = new StringBuffer();            for(int i = 0; i < r_array.size(); i++){                String _r = r_array.getJSONArray(i).getString(0);                if(StringUtils.isNotBlank(_r)){                    r_buffer.append(_r);                }            }            return r_buffer.toString();        }catch(Exception e){            e.printStackTrace();            return null;        }    }    public static void main(String[] args) {        /*GoogleApi googleApi = new GoogleApi();*/        GoogleApi googleApi = new GoogleApi("122.224.227.202", 3128);        String result = googleApi.translate("Many applications within the enterprise domain ", "", "zh");        System.out.println(result);    }}

需要的js

var b = function (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}var tk =  function (a,TKK) {    //console.log(a,TKK);    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)}

jar 包下载:

http://download.csdn.net/download/qq_35704236/10156433

jar 包调用

 public static void main(String[] args) {        /*GoogleApi googleApi = new GoogleApi();*/        GoogleApi googleApi = new GoogleApi("122.224.227.202", 3128);        String result = googleApi.translate("Test", "", "zh");        System.out.println(result);    }

jar 包输出

测试

写在最后:

但是 封ip 的速度太快了, 各位如果需要用于生产环境,必须加上ip 代理,如果实在不行。。。就换百度吧。。。虽然有字数限制。。