python: tkinter + 百度翻译

tkinter与调用百度翻译做成的小翻译机

python3.7.7

使用方法都有说明

☆—转载请标明出处—☆


py文件:

from tkinter import *
import execjs
import requests
import re
from tkinter import messagebox

class lil_transelll(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widget()

    def create_widget(self):
        self.label01 = Label(self, text="请输入要翻译的英文或中文内容")
        self.label01.pack()

        self.require = StringVar()
        self.enter = Entry(self, textvariable=self.require)
        self.enter.pack()

        self.btn01 = Button(self, text="确认", command=self.tran,)
        self.btn01.pack()

        self.label02 = Label(self, height=5, width=40, bg="linen")
        self.label02.pack()

        # 滚动条与输出框
        self.frame01 = Frame(self, height=100,
                             width=40)
        self.frame01.pack()

        self.output = Listbox(self.frame01, width=35,
                              height=10,
                              bg="linen")
        self.output.pack(side=LEFT)

        self.roll_y = Scrollbar(self.frame01)
        self.roll_y.pack(side=RIGHT, fill=Y)

        self.frame00 = Frame(self, height=100,width=35)
        self.frame00.pack()
        self.label = Label(self.frame00,
                             text="the storage widget",
                             width=20,height=1)
        self.label.pack(side=BOTTOM)

        self.roll_x = Scrollbar(self.frame00,
                                orient=HORIZONTAL,)
        self.roll_x.pack(side=TOP, fill=X)

        self.output.config(yscrollcommand=self.roll_y.set,
                           xscrollcommand=self.roll_x.set)

        self.roll_y.config(command=self.output.yview)
        self.roll_x.config(command=self.output.xview)

    def test(self):
        self.label02["text"] = "shit"+self.require.get()

    def tran(self):
        if self.require.get() == "":
            messagebox.showinfo("还没有输入", "请先输入")
            return

        tranned = trans(self.require.get())
        self.label02["text"] = tranned.res_1
        for item in tranned.res_2:
            self.output.update()
            self.output.insert(END, str(item))
            self.output.update()
            self.output.see(END)

class trans:
    _headers = {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-Hans-CN, zh-Hans; q=0.5",
        # "Connection":"keep-alive",
        "Content-Length": "11",
        "Cache-Control": "no-cache",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Cookie": "Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1591278298; SOUND_PREFER_SWITCH=1; FANYI_WORD_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1591095381,1591095525,1591096393,1591278298; SOUND_SPD_SWITCH=1; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; BDRCVFR[SL8xzxBXZJn]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=; ZD_ENTRY=baidu; session_id=1591108364429; session_name=www.baidu.com; BAIDUID=5987A42D6DC28621AEC052A0C8A7DD6E:FG=1; BIDUPSID=B2D9DC5D8812A76030109CE30AD7C1FA; PSTM=1591104396; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=4e9ab7a84e10cdbcd57f89d1abda7cfa21994d86_1591278299_js; __yjsv5_shitong=1.0_7_f0c203096c3bc26bd0f633283b9f07243a8e_300_1591278298784_182.90.204.123_e339399f",
        "Host": "fanyi.baidu.com",
        "Origin": "https://fanyi.baidu.com",
        "Referer": "https://fanyi.baidu.com/?aldtype=16047",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
        "X-Requested-With": "XMLHttpRequest"
    }

    headers = {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Connection": "keep-alive",
        "Content-Length": "132",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Cookie": "Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1591278298; SOUND_PREFER_SWITCH=1; FANYI_WORD_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1591095381,1591095525,1591096393,1591278298; SOUND_SPD_SWITCH=1; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; BDRCVFR[SL8xzxBXZJn]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=; ZD_ENTRY=baidu; session_id=1591108364429; session_name=www.baidu.com; BAIDUID=5987A42D6DC28621AEC052A0C8A7DD6E:FG=1; BIDUPSID=B2D9DC5D8812A76030109CE30AD7C1FA; PSTM=1591104396; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=4e9ab7a84e10cdbcd57f89d1abda7cfa21994d86_1591278299_js; __yjsv5_shitong=1.0_7_f0c203096c3bc26bd0f633283b9f07243a8e_300_1591278298784_182.90.204.123_e339399f",
        "Host": "fanyi.baidu.com",
        "Origin": "https://fanyi.baidu.com",
        "Referer": "https://fanyi.baidu.com/?aldtype=16047",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
        "X-Requested-With": "XMLHttpRequest"
        # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763",
    }

    _url = "https://fanyi.baidu.com/langdetect"
    url = 'https://fanyi.baidu.com/v2transapi'

    def __init__(self, word):
        self.re_sentence = word
        self.res_1 = ""
        self.res_2 = []
        self.out_put()

    def get_lg(self):
        parameters_1 = {
            "query": self.re_sentence
        }
        _req = requests.post(trans._url, data=parameters_1, headers=trans._headers)
        _req.encoding = "utf-8"
        lg = _req.text.split('"')[-2]
        print(lg)
        return lg

    def get_sign(self):
        with open("fy.js") as f:
            jsData = f.read()
        sign = execjs.compile(jsData).call("e", self.re_sentence)  # 调用js代码中的 e函数,传入参数为 inputData
        print(sign)
        return sign

    def get_tran(self):

        parameters_2 = {
            "from": "en" if self.get_lg() == "en" else "zh",
            "to": "zh" if self.get_lg() == "en" else "en",
            "query": self.re_sentence,
            "transtype": "enter",
            "simple_means_flag": "3",
            "sign": self.get_sign(),
            "token": "6e30be2a0b1c9f99ea96980a659cf8ef",
            "domain": "common"
        }
        req = requests.post(trans.url, data=parameters_2, headers=trans.headers)
        req.encoding = "utf-8"
        print(req)
        return req.text

    def out_put(self):
        all_req = self.get_tran()
        pat1 = '"dst":"[\\s\\S](.*?)"'
        pat2 = ',"tran":"[\\s\\S]*?","def"'
        res1 = re.search(pat1, str(all_req))
        res2 = re.compile(pat2).findall(str(all_req))
        print(str(res1))
        print(str(res2))
        res1_t = str(res1)
        res1_t = res1_t.split('"')[-2]
        print(type(res1_t))
        t = res1_t
        t = t.encode('utf8').decode('unicode_escape')
        t = t.encode('utf8').decode('unicode_escape')
        self.res_1 = t
        print(self.res_1)
        for item in res2:
            print(item)
            item = item.split('"')[-4]
            item = item.encode('utf8').decode('unicode_escape')
            print(item, type(item))

            self.res_2.append(item)


root = Tk()
root.geometry("300x400+200+100")
root.title("英汉互译")

lil_transelll(root)

root.mainloop()

fy.js
放在和py文件同个目录下

var i = "320305.131321201"
 
function n(r, o) {
    for (var t = 0; t < o.length - 2; t += 3) {
        var a = o.charAt(t + 2);
        a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a), a = "+" === o.charAt(t + 1) ? r >>> a : r << a, r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a
    }
    return r
}
 
 
function e(r) {
    var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    if (null === o) {
        var t = r.length;
        t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
    } else {
        for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]);
        var g = f.length;
        g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
    }
    var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
    u = null !== i ? i : (i = window[l] || "") || "";
    for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
        var A = r.charCodeAt(v);
        128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128)
    }
    for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b], p = n(p, F);
    return p = n(p, D), p ^= s, 0 > p && (p = (2147483647 & p) + 2147483648), p %= 1e6, p.toString() + "." + (p ^ m)
}

运行效果:
d=====( ̄▽ ̄*)b


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值