本帖最后由 似水流年2015 于 2020-9-24 20:15 编辑
初衷:
学习编程时,不少命令不懂是啥意思,不好记,有时编程报错英文,要手动把错误复制发到微信的文件助手,翻译一下,看看啥意思,用过有道或金山词霸或熊猫ocr识别翻译,总感觉不够省时,翻译也不算准确,快捷键鼠标采词自动翻译,有时会误翻译,有时会和其它软件冲突,总感觉不对劲,有点乱七八糟的感觉。就自己写了一个简简单单的。
不接受任何反驳,我自己的崽才是最好的崽
使用说明:
1.自动复制第0行翻译结果。
2.中英文翻译不用切换,直接输入就行,有道会自动识别的。其它语言不知道会不会自动翻译,因为我打不出。
下载地址:https://www.lanzoux.com/ixMGbgwa65e
开始是用易语言+JS写的,因为有道翻译时post包会传送加密的md5参数,所以得读取JS或用易语言模拟其加密过程。易语言写完后,却发现只能翻译中文,输入英文翻译会卡死。
改用python写就没有这个现象,流畅自如,于是就用python了。
[Python] 纯文本查看 复制代码
#pyperclip是复制粘贴 到剪贴板
import time,requests,random,hashlib,json,pyperclip
from bs4 import BeautifulSoup
#不加cookie不行
handers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"Referer": "http://fanyi.youdao.com/",
"Cookie": "OUTFOX_SEARCH_USER_ID=829686996@10.108.160.17; JSESSIONID=aaaXBZwTtQCgucOlrZFnx; OUTFOX_SEARCH_USER_ID_NCOO=491472124.65368974; ___rl__test__cookies="+str(int(time.time()* 1000) )
}
# with open(r'D:\ZM\test.js') as f: 这段是js文件读取的,印象深刻啊,用乐易自带的md5.js 弄出来的md5竟然不对,后来百度找了一段,对了
# jsdata = f.read()
# ctx = execjs.compile(jsdata)
# result=ctx.call('fz',text) #ts,bv,salt,sign
# #print(result)
# ts=result[0]
# salt=result[2]
# sign=result[3]
# bv=result[1]
#print(len(sign),len(bv))
text="" #定义为空
while text!="exit": #如果内容不等于 exit 退出命令,则循环翻译
# 构造各项参数
if text =="": #是空的话,就提示输入翻译内容
text = input("请输入要翻译的内容:\n")
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
ts = int(time.time() * 1000) # 取13位的时间戳整数
salt = str(ts) + str(random.randint(1, 9)) # 用时间戳和一位随机整数 连接成字符串
# 用指定的字符 和翻译 和 salt 连接后,编码,再求出16位加密md5
sign = hashlib.md5(("fanyideskweb" + text + salt + "]BjuETDhU)zqSxf-=B#7m").encode(encoding='UTF-8')).hexdigest()
bv = hashlib.md5(handers["User-Agent"].encode(encoding='UTF-8')).hexdigest() # ua 也求md5
data = {
"i": text,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": salt,
"sign": sign,
"ts": ts,
"bv": bv,
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_CLICKBUTTION",
}
R = requests.post(url, headers=handers, data=data)
# Be=BeautifulSoup(R.text,"lxml")
dict_text = json.loads(R.text) #转为json
#print(R.text)
text="" #设置为空,免得后面循环都是翻译同一个词语
boolf=True #当为假是,表示在循环时,要用户输入 新的待翻译词语,如果为真,则表示用户没有选择序号复制已翻译的结果,自动去进行翻译、
appp=[] #把上一次的翻译列表清空
#print(dict_text["errorCode"])
if dict_text["errorCode"]==0: #错误码为0 表示翻译成功
a="0--%s"%dict_text["translateResult"][0][0]["tgt"] #取出翻译结果
appp.append(a) #加到已翻译词语列表里
pyperclip.copy(dict_text["translateResult"][0][0]["tgt"])
print("\n")
print(a)
if "smartResult" in dict_text.keys(): #如果存在 智慧翻译词语
for index,i in enumerate(range(len(dict_text["smartResult"]["entries"]))): #从智慧翻译词语组 循环取出翻译结果
m=dict_text["smartResult"]["entries"][i].strip() #取出一个智慧翻译结果
if m!="": #这个智慧翻译的结果不是空的
b="%d--%s"%(index,m)
print(b)
appp.append(b)
selce=input("已自动复制第一行翻译,需要其它行可以输入相应的序号回车即复制,若要继续翻译,请直接输入要翻译的内容,再按回车:\n\n") #存着用户输入的命令,用于等会判断用户是要复制翻译结果,还是要继续翻译内容。
for app in appp: #循环把翻译结果取出
if selce in app[0:2]: #逐个判断翻译的结果中是否存在 相应的序号
c = app.split("--")[1] #如果序号存在,表示用户想复制翻译结果
#print(c)
pyperclip.copy(c) #自动复制结果
boolf=False #置假,表示下面的 if boolf: 为假,不成立,不给text赋值,然后在循环头,会判断到text为空,让用户输入要翻译的词语
print("已自动复制,请粘贴使用!\n")
break
if boolf: #为真,就是用户没输入要复制的序号,直接去执行翻译。
text = selce
|