完整的tk算法:

//源自http://translate.google.cn/
TKK=eval('((function(){var a\x3d618632403;var b\x3d1485484074;return 412204+\x27.\x27+(a+b)})())');
//会变动 //源自http://translate.google.cn/translate/releases/twsfe_20161212_RC00/r/js/desktop_module_main.js
var gk = function(a) {
return function() {
return a
}
},
hk = function(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
},
ik = null, jk = function(a) {
var b;
if (null !== ik)
b = ik;
else {
b = gk(String.fromCharCode(84));
var c = gk(String.fromCharCode(75));
b = [b(), b()];
b[1] = c();
b = (ik = window[b.join(c())] || "") || ""
}
var d = gk(String.fromCharCode(116)), c = gk(String.fromCharCode(107)), d = [d(), d()];
d[1] = 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 = hk(a, "+-a^+6");
a = hk(a, "+-3^+b+-f");
a ^= Number(d[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return c + (a.toString() + "." +
(a ^ b))
};

VBA代码如下:

Function GoogleTranslate(strWord As String, Optional Mode As Boolean = False) As String
'Mode为TRUE则为汉译英,为FALSE则为英译汉,默认是FALSE
Dim strURL As String
Dim strText As String
Dim strJSScript As String
Dim objHTTP As Object
Dim TKKFunc As String
Dim OtherFunc As String
Dim objHTML As Object
Dim DataFunc As String
Dim tkValue As String
Dim EncodeWord As String
Dim strMode As String Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
Set objHTML = CreateObject("htmlfile") '获取TKK函数
strURL = "http://translate.google.cn/"
strText = GetReponseText(objHTTP, strURL)
TKKFunc = "TKK=" & Split(Split(strText, "TKK=")(), "');")() & "');" '获取其他函数
strURL = "http://translate.google.cn/translate/releases/twsfe_20161212_RC00/r/js/desktop_module_main.js"
strText = GetReponseText(objHTTP, strURL)
OtherFunc = "var gk=" & Split(Split(strText, "var gk=")(), "var kk=")() '合成完整的tk算法函数,并加上html代码:
strJSScript = "<html><script>" & TKKFunc & OtherFunc & "</script></html>" '计算单词的tk值
objHTML.write strJSScript
tkValue = CallByName(objHTML.parentwindow, "jk", VbMethod, strWord) '将单词进行编码
EncodeWord = CallByName(objHTML.parentwindow, "encodeURIComponent", VbMethod, strWord) '从服务器获取翻译数据
If Mode Then
strMode = "&sl=zh-CN&tl=en"
Else
strMode = "&sl=en&tl=zh-CN"
End If
strURL = "http://translate.google.cn/translate_a/single?client=t" _
& strMode & "&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=bh&ssel=0&tsel=0&kc=1" _
& tkValue _
& "&q=" & EncodeWord
strText = GetReponseText(objHTTP, strURL) '自定义处理数据的js函数
DataFunc = "getdata=function(a){var s='';a=eval(a);for(var i=0;i<a[0].length-1;i++)s+=a[0][i][0];return s}"
strJSScript = "<html><script>" & DataFunc & "</script></html>" '获取翻译
objHTML.write strJSScript
GoogleTranslate = CallByName(objHTML.parentwindow, "getdata", VbMethod, strText) Set objHTTP = Nothing
Set objHTML = Nothing
End Function Private Function GetReponseText(objHTTP As Object, strURL As String)
With objHTTP
.Open "GET", strURL, False
.setRequestHeader "User-Agent", "Mozilla/4.0"
.Send
GetReponseText = .responsetext
End With
End Function

最新文章

  1. string模块
  2. JSF中使用jquery拦截ajax请求
  3. MATLAB - 练习程序,直方图均衡化
  4. vim安装YouCompleteMe 插件
  5. Java基础(37):Java中日期的显示与格式定值----Date与SimpleDateFormat的试用
  6. C++11 现代C++风格的新元素--简介
  7. RMAN备份与恢复深入解&lt;一&gt;
  8. [BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】
  9. easyui page添加文本,js验证码
  10. 对&quot;一维最大子数组和&quot;问题的思考
  11. anroid平台指纹方案
  12. String类的实现(4)写时拷贝浅析
  13. GRPC在NET上的实践(记录篇)
  14. JavaWeb 后端 &lt;十&gt; 之 数据池 C3P0 DPCB JNDI
  15. 单源最短路径Dijkstra算法,多源最短路径Floyd算法
  16. openresty的安装和使用
  17. 3.2 定位shellcode
  18. 一步一步开始FPGA逻辑设计 - 高速接口之PCIe(转)
  19. Snipaste截图
  20. nodejs结合apiblue实现MockServer

热门文章

  1. xmind教程
  2. Hibernate框架增删改查
  3. OS快速开发必备
  4. UILabel+Create
  5. eclipse里添加类似myeclipse打开当前操作目录
  6. 计划任务中使用NT AUTHORITY\SYSTEM用户和普通管理员用户有什么差别
  7. Go语言程序的状态监控
  8. iOS7 StatusBar 使用小结
  9. js keycode 列表
  10. bootstrap 常用类名