基于百度通用翻译API的一个翻译小工具
前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发者账号,把当前翻译接口替换为百度翻译接口。
1.首先注册一个百度个人开发者账号
http://api.fanyi.baidu.com/api/trans/product/index
注册完成后会得到一个APP ID和密钥
2.打开“文档与支持/通用翻译API技术文档”
这里面介绍了如何调用百度翻译接口
下面是完整的代码
第59行写明如何调用百度翻译API以及参数的构造方法,同时相对之前的版本,修改了下页面按钮的布局
1 # -*- coding:utf-8 -*- 2 3 import requests 4 from requests.exceptions import RequestException 5 import tkinter as tk 6 from tkinter import ttk 7 import hashlib 8 import random 9 10 class Translate(): 11 def __init__(self): 12 self.window = tk.Tk() #创建window窗口 13 self.window.title("简易翻译器") # 定义窗口名称 14 # self.window.resizable(0,0) # 禁止调整窗口大小 15 self.menu = ttk.Combobox(self.window,width=6) 16 self.input = tk.Entry(self.window, width=80) # 创建一个输入框,并设置尺寸 17 self.info = tk.Text(self.window, height=20) # 创建一个文本展示框,并设置尺寸 18 19 self.menu['value'] = ('转成繁体中文','转成英文', '转成日文', '转成韩文', '转成阿拉伯文') 20 self.menu.current(0) 21 22 # 添加一个按钮,用于触发翻译功能 23 self.t_button = tk.Button(self.window, text='翻译', relief=tk.RAISED, width=8, height=1, command=self.fanyi) 24 # 添加一个按钮,用于触发清空输入框功能 25 self.c_button1 = tk.Button(self.window, text='清空输入', relief=tk.RAISED, width=8, height=1, command=self.cle_e) 26 # 添加一个按钮,用于触发清空输出框功能 27 self.c_button2 = tk.Button(self.window, text='清空输出', relief=tk.RAISED,width=8, height=1, command=self.cle) 28 # 添加一张图标 29 self.image_file = tk.PhotoImage(file='py128.png') 30 self.label_image = tk.Label(self.window, image=self.image_file) 31 32 def gui_arrang(self): 33 """完成页面元素布局,设置各部件的位置""" 34 self.input.grid(row=0,column=0,padx=5,pady=5) 35 self.info.grid(row=1,rowspan=2,column=0,padx=5,pady=5) 36 37 self.t_button.grid(row=0,column=1,padx=5,pady=5,sticky=tk.W) 38 self.c_button1.grid(row=0,column=2,padx=0,pady=5,sticky=tk.W) 39 self.c_button2.grid(row=0,column=3,padx=5,pady=5,sticky=tk.W) 40 41 self.menu.grid(row=1, column=1, padx=5, pady=5, rowspan=2, sticky=tk.NW) 42 43 self.label_image.grid(row=2, column=1,columnspan=3,sticky=tk.N) 44 45 def tran_type(self): 46 type = None 47 if self.menu.get() == "转成繁体中文": 48 type = "cht" 49 if self.menu.get() == "转成英文": 50 type = "en" 51 elif self.menu.get() == "转成日文": 52 type = "jp" 53 elif self.menu.get() == "转成韩文": 54 type = "kor" 55 elif self.menu.get() == "转成阿拉伯文": 56 type = "ara" 57 return type 58 59 def fanyi(self): 60 """定义一个函数,完成翻译功能""" 61 62 original_str = self.input.get() # 定义一个变量,用来接收输入框输入的值 63 appid = 'XXXX' # 你的appid 64 secretKey = 'XXXX' # 你的密钥 65 66 salt = random.randint(32768, 65536) # 生成一个随机数 67 sign = appid + original_str + str(salt) + secretKey # 将appid和要翻译的字符、随机数、密钥组合成一个原始签名 68 m = hashlib.new("md5") 69 m.update(sign.encode(encoding="utf-8")) # 注意使用utf-8编码 70 msign = m.hexdigest() # 得到原始签名的MD5值 71 72 data = { 73 "q": original_str, 74 "from": "auto", 75 "to": self.tran_type(), 76 "appid": appid, 77 "salt": salt, 78 "sign": msign 79 } 80 url = "http://api.fanyi.baidu.com/api/trans/vip/translate" 81 try: 82 r = requests.get(url, params=data) 83 if r.status_code == 200: 84 result = r.json() 85 translate_result = result["trans_result"][0]["dst"] 86 self.info.delete(1.0, "end") # 输出翻译内容前,先清空输出框的内容 87 self.info.insert('end',translate_result) # 将翻译结果添加到输出框中 88 except RequestException: 89 self.info.insert('end', "发生错误") 90 def cle(self): 91 """定义一个函数,用于清空输出框的内容""" 92 self.info.delete(1.0,"end") # 从第一行清除到最后一行 93 94 def cle_e(self): 95 """定义一个函数,用于清空输入框的内容""" 96 self.input.delete(0,"end") 97 98 def main(): 99 t = Translate() 100 t.gui_arrang() 101 tk.mainloop() 102 103 if __name__ == '__main__': 104 main()
最终效果如下
ps.下面是通用翻译API服务的使用详情,每天都会统计