无需申请API KEY的百度翻译(web.script执行js例子)
By
popy32
at 2022-04-12 • 1人收藏 • 830人看过
利用 web.script 获取百度翻译网页版的 sign,无需申请API,可作为aardio调用js的示例,注意这里js标准为ES5以下,使用先确保兼容性
// @Author : popy32 // @Contact : 74o5o27o8#qq.com // @File : webscript.aardio // @Comment : webscript执行js获取百度翻译sign import debug; import console; import win.ui; /*DSG{{*/ var winform = win.form(text="百度翻译JS";right=759;bottom=469) winform.add( button={cls="button";text="日志测试1";left=0;top=0;right=136;bottom=32;z=2}; button2={cls="button";text="翻译";left=0;top=32;right=136;bottom=64;z=3}; button3={cls="button";text="调试sign";left=0;top=64;right=136;bottom=96;z=5}; edit={cls="edit";left=0;top=256;right=760;bottom=472;autohscroll=false;bgcolor=0;color=16777215;edge=1;multiline=1;z=1}; edit2={cls="edit";text="Edit";left=136;top=0;right=760;bottom=256;autohscroll=false;edge=1;font=LOGFONT(h=-16;name='Calibri');multiline=1;z=4} ) /*}}*/ import console; import web.script; import inet.http; // js 来源 编程助手工具 百度翻译 // https://bbs.125.la/forum.php?mod=viewthread&tid=14644335 jsBaiduFanyi = /** var i = null; var window = {}; function n(r, o) { for (var t = 0; t < o.length - 2; t += 3) { var a = o.charAt(t + 2); a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a), a = "+" === o.charAt(t + 1) ? r >>> a : r << a, r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a } return r } function e(r) { var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g); if (null === o) { var t = r.length; t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substring(r.length - 10)) } else { for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]); var g = f.length; g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join("")) } var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107); u = null !== i ? i : (i = window[l] || "") || ""; u = '320305.131321201'; for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) { var A = r.charCodeAt(v); 128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128) } for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b], p = n(p, F); return p = n(p, D), p ^= s, 0 > p && (p = (2147483647 & p) + 2147483648), p %= 1e6, p.toString() + "." + (p ^ m) } **/ // 日志输出 Logd = function(...){ import time; var args = {...}; var tm = time.now(); tm.format = "[%Y/%m/%d %H:%M:%S] "; // var debugInfo = debug.queryinfo(2, "select source,function,upvars,name,currentline,activelines") ; winform.edit.log(tostring(tm), "line: ", debugInfo[['currentline']], " ", ..string.join(args,' '),'\r\n'); // 滚动条随光标滚动 winform.edit.scrollCaret(); } // 测试当前目录 winform.button.oncommand = function(id,event){ import fsys; import fsys.path; Logd("winform.button.oncommand", "fsys.getCurDir()", fsys.getCurDir()); Logd("winform.button.oncommand", "io._exepath", io._exepath); Logd("winform.button.oncommand", 'io.fullpath("/")', io.fullpath("/") ); Logd("winform.button.oncommand", 'io.fullpath("~")', io.fullpath("~") ); } vm = web.script("JScript"); vm.doScript(jsBaiduFanyi); // sign = vm.xcall("e", source); // 逐行翻译 BaiduFanyiLine = function(source){ var oHttp = inet.http(); var response; oHttp.head("https://www.baidu.com"); response = oHttp.get("http://fanyi.baidu.com/translate"); //Logd("response", response); var pattern = "token\: '(.*?)'"; var token; for s in ..string.gmatch( response, pattern ){ token = s; } var sign = vm.xcall("e", source); //Logd("BaiduFanyi", "token:", token, "sign:", sign); /* https://fanyi.baidu.com/v2transapi?from=en&to=zh&query=good&transtype=translang& simple_means_flag=3&sign=262931.57378&token=163d24277319e8b7b8b191c65dc174ce */ //source = inet.url.encode(source); //var url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh&query=" ++ source ++ // "&transtype=translang&simple_means_flag=3&sign=" ++ sign ++ "&token="++ token; //var url = "http://httpbin.org/anything"; var url = "https://fanyi.baidu.com/v2transapi"; var postdata = "from=en&to=zh&query=" ++ source ++ "&transtype=translang&simple_means_flag=3&sign=" ++ sign ++ "&token="++ token; response = oHttp.post(url, postdata); //console.dump(response); var t = ..web.json.tryParse(response); //console.dump(t); var t1 = (t[["trans_result"]][["data"]]); //console.dump(t1) var res = ""; if(t1) { for(i=1;#t1;1){ if(t1[[i]][["dst"]]) { res = res ++ t1[[i]][["dst"]]; } } } return res; } // 翻译 BaiduFanyi = function(source){ //source = string.fromto(source,65001,0) var lines = ..string.splitEx(source, '\r\n'); var res = ""; var count = #lines; for(i=1; count; 1){ var line = lines[i]; line = string.trim(line); if (line and #line > 0) { res = res ++ BaiduFanyiLine(line) ; if(i < count) { res = res ++ '\r\n'; } } } return res; } winform.button2.oncommand = function(id,event){ var txt = winform.edit2.text; if(#txt) { //var res = BaiduFanyiLine(txt); var res = BaiduFanyi(txt); Logd("翻译结果:", '\r\n', res); } } winform.button3.oncommand = function(id,event){ var txt = winform.edit2.text; if(#txt) { var sign = vm.xcall("e", txt); Logd("sign:", sign); } } winform.show(); win.loopMessage();
2 个回复 | 最后更新于 2022-04-12
登录后方可回帖
不错,赞