功能介绍:程序自动读取剪贴板字符串,如果字符串为非中文,均翻译为中文,如果字符串为中文,则翻译为英文,如果字符串为网址,则不进行任意操作,tkk代码部分取自github,脚本支持http/https代理,非代理请求google.cn,代理则请求google.com,使用代理模式时,脚本会创建proxy.ini,可以修改该文件来修改代理地址,格式:127.0.0.1:8080
下面是完整代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import requests
import os
import random
import win32clipboard as wc
import time
import tkinter as tk
import ctypes
proxies = {}
root=tk.Tk()
root.withdraw()
baseurl = ["https://translate.google.com/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&tl=","http://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&tl="]
s = ""
pd = 0 #proxies id
pl = [] #proxies list
def select_proxy():
global proxies
while True:
id = input("是否启用代理(默认不启用)?Y/N")
if id == "Y" or id == "y":
check()
os.system("title 【当前使用代理翻译】")
return
elif id == "N" or id == "n":
proxies = {}
os.system("title 【当前使用直连翻译】")
return
else:
proxies = {}
os.system("title 【当前使用直连翻译】")
return
ua = ["Mozilla/5.0 (iPhone 84; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.8.0 Mobile/14G60 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1",
"Mozilla/5.0 (Linux; Android 7.0; STF-AL10 Build/HUAWEISTF-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.18 NetType/WIFI Language/en",
"Mozilla/5.0 (Linux; Android 5.1.1; vivo Xplay5A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1.1)",
"Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; STF-AL00 Build/HUAWEISTF-AL00) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.9 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0; LEX626 Build/HEXCNFN5902606111S) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/7.4 baiduboxapp/8.3.1 (Baidu; P1 6.0)",
"Mozilla/5.0 (iPhone 92; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.7.2 Mobile/14F89 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1",
"Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; ZUK Z2121 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.8.952 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A372 MicroMessenger/6.5.17 NetType/WIFI Language/zh_HK",
"Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; SM-C7000 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.2.948 Mobile Safari/537.36",
"MQQBrowser/5.3/Mozilla/5.0 (Linux; Android 6.0; TCL 580 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 MicroMessenger/6.5.16 NetType/WIFI Language/zh_CN",
"Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; MI 4S Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3",
"Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9550 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1; m3 note Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1)"]
def int_overflow(val):
maxint = 2147483647
if not -maxint-1 <= val <= maxint:
val = (val + (maxint + 1)) % (2 * (maxint + 1)) - maxint - 1
return val
def unsigned_right_shitf(n,i):
# 数字小于0,则转为32位无符号uint
if n<0:
n = ctypes.c_uint32(n).value
# 正常位移位数是为正数,但是为了兼容js之类的,负数就右移变成左移好了
if i<0:
return -int_overflow(n << abs(i))
return int_overflow(n >> i)
def google_TL(src):
a = src.strip()
b = 406644
b1 = 3293161072
jd = "."
Sb = "+-a^+6"
Zb = "+-3^+b+-f"
e = []
for g in range(len(a)):
m = ord(a[g])
if 128 > m:
e.append(m)
else:
if 2048 > m:
e.append(m >> 6 | 192)
else:
if 55296 == (m & 64512) and g + 1 < len(a) and 56320 == (a[g+1] & 64512):
g += 1
m = 65535 + ((m & 1024) << 10) + (a[g] & 1023)
e.append(m >> 18 | 240)
e.append(m >> 12 & 63 | 128)
else:
e.append(m >> 12 | 224)
e.append(m >> 6 & 63 | 128)
e.append(m & 63 | 128)
a = b
for f in range(len(e)):
a += int(e[f])
a = google_RL(a, Sb)
a = google_RL(a, Zb)
if b1:
a ^= b1
else:
a ^= 0
if 0 > a:
a = (a & 2147483647) + 2147483647
a %= 1E6
return str(int(a)) + jd + str(int(a) ^ b)
def google_RL(a,b):
t = 'a'
Yb = '+'
for c in range(0, len(b)-2, 3):
d = b[c+2]
if d >= t:
d = ord(d[0]) - 87
else:
d = int(d)
if b[c+1] == Yb:
d = unsigned_right_shitf(a,d)
else:
d = int(a) << d
if b[c] == Yb:
a = int(a) + d & 4294967295
else:
a = int(a) ^ d
return a
def check():
global proxies,pl
if not os.path.exists("proxy.ini"):
f=open("proxy.ini","w",encoding="utf-8")
f.close()
f = open("proxy.ini","r",encoding="utf-8")
line = f.readline()
while line:
pl.append(line)
line = f.readline()
f.close()
if pl != None:
line = str(pl[pd]).rstrip('\n')
proxies = {"http":line,"https":line}
else:
print("代理格式:\"127.0.0.1:7890\"")
os.system("notepad.exe proxy.ini")
os.system("pause")
check()
def fanyi(s,tl,tkk):
try:
global proxies,ua,baseurl,pd
s = s.replace(" & "," and ")
s_ = s
tl_ = tl
url = ""
if proxies == {}:
url = baseurl[1]+tl+"&tk="+tkk
else:
url = baseurl[0]+tl+"&tk="+tkk
data = {
"q":s_
}
rua = random.choice(ua)
hdr = {
"User-Agent": rua,
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
}
r = requests.post(url,proxies=proxies,data=data,headers=hdr).json()
i = 0
temp = r['sentences']
k = ""
while i < len(temp):
k += temp[i]['trans']
i += 1
print(k)
return
except:
if proxies != {}:
if pd == 0:
pd = 1
line = str(pl[pd]).rstrip('\n')
proxies = {"http":line,"https":line}
elif pd == 1:
pd = 0
line = str(pl[pd]).rstrip('\n')
proxies = {"http":line,"https":line}
time.sleep(3)
fanyi(s_,tl_,tkk)
pass
def is_contains_chinese(s):
for i in s:
if u'\u4e00' <= i <= u'\u9fff':
return True
if __name__ == '__main__':
select_proxy()
os.system('cls')
while True:
try:
time.sleep(2)
s = root.clipboard_get()
if s == "":
time.sleep(2)
continue
elif str(s).startswith('https://') or str(s).startswith('http://'):
time.sleep(2)
continue
except:
continue
if is_contains_chinese(s):
tl="en"
s = str(s).replace("\r\n"," ").replace("\n"," ")
print(s)
tkk = google_TL(s)
print("\n")
fanyi(s,tl,tkk)
print("\n")
wc.OpenClipboard()
wc.EmptyClipboard()
wc.CloseClipboard()
else:
tl="zh"
s = str(s).replace("-\r\n","").replace("-\n","")
s = str(s).replace("\r\n"," ").replace("\n"," ")
print(s)
tkk = google_TL(s)
print("\n")
fanyi(s,tl,tkk)
print("\n")
wc.OpenClipboard()
wc.EmptyClipboard()
wc.CloseClipboard()