Advertisement

Google 批量翻译 脚本

阅读量:

先安装 execjs

pip install execjs


根据要翻译的字符串计算google翻译接口的tk值

HandleJs.py:

复制代码
 import execjs

    
  
    
  
    
 class Py4Js():
    
  
    
     def __init__(self):
    
     self.ctx = execjs.compile("""
    
     function TL(a) {
    
     var k = "";
    
     var b = 406644;
    
     var b1 = 3293161072;
    
   13.         var jd = ".";
    
     var $b = "+-a^+6";
    
     var Zb = "+-3^+b+-f";
    
   17.         for (var e = [], f = 0, g = 0; g < a.length; g++) {
    
         var m = a.charCodeAt(g);
    
         128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023),
    
         e[f++] = m >> 18 | 240,
    
         e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224,
    
         e[f++] = m >> 6 & 63 | 128),
    
         e[f++] = m & 63 | 128)
    
     }
    
     a = b;
    
     for (f = 0; f < e.length; f++) a += e[f],
    
     a = RL(a, $b);
    
     a = RL(a, Zb);
    
     a ^= b1 || 0;
    
     0 > a && (a = (a & 2147483647) + 2147483648);
    
     a %= 1E6;
    
     return a.toString() + jd + (a ^ b)
    
     };
    
   35.     function RL(a, b) {
    
     var t = "a";
    
     var Yb = "+";
    
     for (var c = 0; c < b.length - 2; c += 3) {
    
         var d = b.charAt(c + 2),
    
         d = d >= t ? d.charCodeAt(0) - 87 : Number(d),
    
         d = b.charAt(c + 1) == Yb ? a >>> d: a << d;
    
         a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
    
     }
    
     return a
    
     }
    
     """)
    
  
    
     def getTk(self, text):
    
     return self.ctx.call("TL", text)
    
    
    
    
    代码解读

google.py:

复制代码
 import urllib.request

    
 from HandleJs import Py4Js
    
  
    
  
    
 def open_url(url):
    
     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
    
     req = urllib.request.Request(url=url, headers=headers)
    
     response = urllib.request.urlopen(req)
    
     data = response.read().decode('utf-8')
    
     return data
    
  
    
  
    
 def translate(content, tk):
    
     if len(content) > 4891:
    
     print("翻译的长度超过限制!!!")
    
     return
    
  
    
     content = urllib.parse.quote(content)
    
     # 英转日
    
     url = "https://translate.google.cn/translate_a/single?client=webapp&sl=en&tl=ja&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&source=bh&ssel=0&tsel=0&kc=1&tk=%s&q=%s" % (
    
     tk, content)
    
     # 英转西班牙
    
     # url ='https://translate.google.cn/translate_a/single?client=webapp&sl=en&tl=es&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=gt&source=bh&ssel=0&tsel=0&kc=1&tk=%s&q=%s' % (tk, content)
    
     # 英转葡萄牙
    
     # url = 'https://translate.google.cn/translate_a/single?client=webapp&sl=en&tl=pt&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=gt&source=bh&ssel=0&tsel=0&kc=1&tk=%s&q=%s'% (tk, content)
    
     # 英转韩语
    
     # url = 'https://translate.google.cn/translate_a/single?client=webapp&sl=en&tl=ko&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&source=bh&ssel=0&tsel=0&kc=1&tk=%s&q=%s' % (
    
     #     tk, content)
    
  
    
     result = open_url(url)
    
  
    
     end = result.find("\",")
    
     if end > 4:
    
     # print(result[4:end])
    
     return result[4:end]
    
  
    
  
    
 def Ryuan():
    
     '''
    
     从文件中读取要翻译的内容,文件名:yuan
    
     '''
    
     with open('yuan', 'r')as f:
    
     for i in f:
    
         yield i
    
  
    
  
    
 def main():
    
     js = Py4Js()
    
     with open('ja', 'w', encoding='utf-8')as f:
    
     for i in Ryuan():
    
         tk = js.getTk(i) # 计算翻译字符串对应的tk值
    
         t = translate(i, tk) # 翻译结果
    
         f.write('msgid "%s"\n' % i.strip()) # 将翻译的原字符串写入文件ja
    
         f.write('msgstr "%s"\n\n' % t.strip()) #将翻译结果写入文件ja
    
     # while 1:
    
     #     content = input("输入待翻译内容:")
    
     #
    
     #     if content == 'q!':
    
     #         break
    
     #
    
     #     tk = js.getTk(content)
    
     #     translate(content, tk)
    
  
    
  
    
 if __name__ == "__main__":
    
     main()
    
    
    
    
    代码解读

随后将在文件a中记录待翻译的内容;每个内容单独占一行;无需换行处理;编码保存成utf-8;在google.py中的Ryuan()方法将文件名更改为存储内容的路径a;sl参数设置为源语言的语言代码;tl参数设置为目标语言的语言代码

全部评论 (0)

还没有任何评论哟~