吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3161|回复: 25
收起左侧

[Python 转载] Python练习小工具——有道JS接口翻译( 附源码)

[复制链接]
似水流年2015 发表于 2020-9-24 20:09
本帖最后由 似水流年2015 于 2020-9-24 20:15 编辑

image.png


初衷:
学习编程时,不少命令不懂是啥意思,不好记,有时编程报错英文,要手动把错误复制发到微信的文件助手,翻译一下,看看啥意思,用过有道或金山词霸或熊猫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


免费评分

参与人数 5吾爱币 +4 热心值 +4 收起 理由
xiaoyanshu + 1 + 1 谢谢@Thanks!
wuboxun + 1 + 1 谢谢@Thanks!
miqi1314 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
fafaer + 1 谢谢@Thanks!
beyond1994 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 似水流年2015 发表于 2020-9-25 09:54
simdabo 发表于 2020-9-24 23:18
能不能添加  红色  圈圈这一行??

查了一下,接口返回的数据没有这个,只有下面的json内容{"translateResult":[[{"tgt":"请注意","src":"notice"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. 通知,布告;注意;公告\r\n","vt. 通知;注意到;留心\r\n","vi. 引起注意\r\n"],"type":1}}
 楼主| 似水流年2015 发表于 2020-9-24 22:37
simdabo 发表于 2020-9-24 22:32
Traceback (most recent call last):
  File "C:\YD.py", line 3, in
    import  time,requests,random ...

没有 pyperclip 这个模块,这个模块作用是自动复制   pip install pyperclip 安装一下
不负韶华 发表于 2020-9-24 20:17
对于简单封装调用别人的接口的程序不算原创
发错板块了,版主大大@风之暇想
beyond1994 发表于 2020-9-24 20:44
想问一下,这种和网站对接需要html基础吗
 楼主| 似水流年2015 发表于 2020-9-24 20:48
beyond1994 发表于 2020-9-24 20:44
想问一下,这种和网站对接需要html基础吗

少少html基础和Js加解密基础,当初我也觉得不容易 ,咬牙看了一些html基础,和js基础,发现js语法和python差不多的,反正学就是了,学到一定程序,以前的问题都不是问题了
beyond1994 发表于 2020-9-24 20:50
似水流年2015 发表于 2020-9-24 20:48
少少html基础和Js加解密基础,当初我也觉得不容易 ,咬牙看了一些html基础,和js基础,发现js语法和pytho ...

哈哈,我现在就在学Python基础,现阶段的疑问可能在后面就没了
 楼主| 似水流年2015 发表于 2020-9-24 21:03
beyond1994 发表于 2020-9-24 20:50
哈哈,我现在就在学Python基础,现阶段的疑问可能在后面就没了

是的,加油
Lara 发表于 2020-9-24 21:37
beyond1994 发表于 2020-9-24 20:50
哈哈,我现在就在学Python基础,现阶段的疑问可能在后面就没了

教程来一份。
fafaer 发表于 2020-9-24 21:59
好用,顶顶顶顶顶顶顶一下
simdabo 发表于 2020-9-24 22:31
from bs4 import BeautifulSoup

怎么我的说这一行错误了
simdabo 发表于 2020-9-24 22:32
Traceback (most recent call last):
  File "C:\YD.py", line 3, in <module>
    import  time,requests,random,hashlib,json,pyperclip
ModuleNotFoundError: No module named 'pyperclip'
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表