teadrinker

Google Translate

Feb 12th, 2018
985
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $F10::
  2.    Clipboard := ""
  3.    SendInput, ^c
  4.    ClipWait, 1
  5.    if ErrorLevel
  6.       Return
  7.    Clipboard := GoogleTranslate(Clipboard).main
  8.    SoundBeep
  9.    Return
  10.  
  11. GoogleTranslate(str, from := "auto", to := "en")  {
  12.    JSON := new JSON
  13.    JS := JSON.JS, JS.( GetJScript() )
  14.    
  15.    sJson := SendRequest(JS, str, to, from)
  16.    oJSON := JSON.Parse(sJson)
  17.  
  18.    if !IsObject(oJSON[2])  {
  19.       for k, v in oJSON[1]
  20.          trans .= v[1]
  21.    }
  22.    else  {
  23.       MainTransText := oJSON[1, 1, 1]
  24.       for k, v in oJSON[2]  {
  25.          trans .= "`n+"
  26.          for i, txt in v[2]
  27.             trans .= (MainTransText = txt ? "" : "`n" . txt)
  28.       }
  29.    }
  30.    if !IsObject(oJSON[2])
  31.       MainTransText := trans := Trim(trans, ",+`n ")
  32.    else
  33.       trans := MainTransText . "`n+`n" . Trim(trans, ",+`n ")
  34.  
  35.    from := oJSON[3]
  36.    trans := Trim(trans, ",+`n ")
  37.    Return {main: MainTransText, full: trans, from: from}
  38. }
  39.  
  40. SendRequest(JS, str, tl, sl)  {
  41.    ComObjError(false)
  42.    url := "https://translate.google.com/translate_a/single?client=t&sl="
  43.         . sl . "&tl=" . tl . "&hl=" . tl
  44.         . "&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&otf=1&ssel=3&tsel=3&pc=1&kc=2"
  45.         . "&tk=" . JS.("tk").(str)
  46.    body := "q=" . URIEncode(str)
  47.    contentType := "application/x-www-form-urlencoded;charset=utf-8"
  48.    userAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
  49.    Return JSON.GetFromUrl(url, body, contentType, userAgent)
  50. }
  51.  
  52. URIEncode(str, encoding := "UTF-8")  {
  53.    VarSetCapacity(var, StrPut(str, encoding))
  54.    StrPut(str, &var, encoding)
  55.  
  56.    While code := NumGet(Var, A_Index - 1, "UChar")  {
  57.       bool := (code > 0x7F || code < 0x30 || code = 0x3D)
  58.       UrlStr .= bool ? "%" . Format("{:02X}", code) : Chr(code)
  59.    }
  60.    Return UrlStr
  61. }
  62.  
  63. GetJScript()
  64. {
  65.    script =
  66.    (
  67.       var TKK = ((function() {
  68.         var a = 561666268;
  69.         var b = 1526272306;
  70.         return 406398 + '.' + (a + b);
  71.       })());
  72.  
  73.       function b(a, b) {
  74.         for (var d = 0; d < b.length - 2; d += 3) {
  75.             var c = b.charAt(d + 2),
  76.                 c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
  77.                 c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
  78.             a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
  79.         }
  80.         return a
  81.       }
  82.  
  83.       function tk(a) {
  84.           for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
  85.               var c = a.charCodeAt(f);
  86.               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) ?
  87.               (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240,
  88.               g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
  89.           }
  90.           a = h;
  91.           for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
  92.           a = b(a, "+-3^+b+-f");
  93.           a ^= Number(e[1]) || 0;
  94.           0 > a && (a = (a & 2147483647) + 2147483648);
  95.           a `%= 1E6;
  96.           return a.toString() + "." + (a ^ h)
  97.       }
  98.    )
  99.    Return script
  100. }
  101.  
  102. class JSON
  103. {
  104.    static JS := JSON._GetJScripObject()
  105.    
  106.    Parse(JsonString)  {
  107.       try oJSON := this.JS.("(" JsonString ")")
  108.       catch  {
  109.          MsgBox, Wrong JsonString!
  110.          Return
  111.       }
  112.       Return this._CreateObject(oJSON)
  113.    }
  114.    
  115.    GetFromUrl(url, body := "", contentType := "", userAgent := "")  {
  116.       XmlHttp := ComObjCreate("Microsoft.XmlHttp")
  117.       XmlHttp.Open("GET", url, false)
  118.       ( contentType && XmlHttp.SetRequestHeader("Content-Type", contentType) )
  119.       ( userAgent && XmlHttp.SetRequestHeader("User-Agent", userAgent) )
  120.       XmlHttp.Send(body)
  121.       Return XmlHttp.ResponseText
  122.    }
  123.  
  124.    _GetJScripObject()  {
  125.       VarSetCapacity(tmpFile, (MAX_PATH := 260) << !!A_IsUnicode, 0)
  126.       DllCall("GetTempFileName", Str, A_Temp, Str, "AHK", UInt, 0, Str, tmpFile)
  127.      
  128.       FileAppend,
  129.       (
  130.       <component>
  131.       <public><method name='eval'/></public>
  132.       <script language='JScript'></script>
  133.       </component>
  134.       ), % tmpFile
  135.      
  136.       JS := ObjBindMethod( ComObjGet("script:" . tmpFile), "eval" )
  137.       FileDelete, % tmpFile
  138.       JSON._AddMethods(JS)
  139.       Return JS
  140.    }
  141.  
  142.    _AddMethods(ByRef JS)  {
  143.       JScript =
  144.       (
  145.          Object.prototype.GetKeys = function () {
  146.             var keys = []
  147.             for (var k in this)
  148.                if (this.hasOwnProperty(k))
  149.                   keys.push(k)
  150.             return keys
  151.          }
  152.          Object.prototype.IsArray = function () {
  153.             var toStandardString = {}.toString
  154.             return toStandardString.call(this) == '[object Array]'
  155.          }
  156.       )
  157.       JS.("delete ActiveXObject; delete GetObject;")
  158.       JS.(JScript)
  159.    }
  160.  
  161.    _CreateObject(ObjJS)  {
  162.       res := ObjJS.IsArray()
  163.       if (res = "")
  164.          Return ObjJS
  165.      
  166.       else if (res = -1)  {
  167.          obj := []
  168.          Loop % ObjJS.length
  169.             obj[A_Index] := this._CreateObject(ObjJS[A_Index - 1])
  170.       }
  171.       else if (res = 0)  {
  172.          obj := {}
  173.          keys := ObjJS.GetKeys()
  174.          Loop % keys.length
  175.             k := keys[A_Index - 1], obj[k] := this._CreateObject(ObjJS[k])
  176.       }
  177.       Return obj
  178.    }
  179. }
Add Comment
Please, Sign In to add comment