序
继昨天发的——申请调用百度翻译API(一),今天给大家分享一个简单的应用实例,应用涉及到内容有:python的gui用户界面设计、访问服务器的方法、md5算法加密以及调用百度翻译API
一、预备知识
1、完成开发者申请
完成开发者申请,获得appid和密钥并免费开通服务(具体详见我的上一篇文章——申请调用百度翻译API(一))
2、相关HTTP协议知识
3、urllib库的使用
4、发送请求
5、参考官方技术文档:
https://api.fanyi.baidu.com/api/trans/product/apidoc
二、操作实例
在上述官方文档中找到下图中例程
在技术文档中找到样例,修改appid和密钥之后就可以完成调用了
三、应用
1、设计目标
设计一个如下图的用户窗口调用百度翻译的API,实现翻译功能
2、简述
该应用涉及到内容有:python的gui用户界面设计、访问服务器的方法、md5算法加密以及调用百度翻译API
3、程序分析
(1)调用所需要的库
(2)设计gui
(3)编写两个按钮事件的具体内容
(4)调用百度翻译API的翻译函数
4.完整代码
from tkinter import *
from urllib import request
from urllib import parse
import json
import hashlib
def translate_word (src_str):
#simulation browse load host url,get cookie
URL = "https://api.fanyi.baidu.com/api/trans/vip/translate"
Form_data = {
'from':'auto','to':'zh','q':src_str,'appid':'填你自己的','salt':'1234567890'} #创建Form_data字典,存储向服务器发送的data,其中,salt为随机数(任意写)
Key = '填你自己的'
m = Form_data['appid'] + src_str + Form_data['salt'] + Key
m_MD5 = hashlib.md5(m.encode('utf-8'))
Form_data['sign'] = m_MD5.hexdigest()
data = parse.urlencode(Form_data).encode('utf-8') #拼接完整请求:http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
#或者用这种方式发送请求
# data ='?appid=' + Form_data['appid'] + '&q=' + parse.quote(Form_data['q']) + '&from=' + Form_data['from'] + '&to=' + Form_data['to'] + '&salt=' + Form_data['salt'] + '&sign=' + Form_data['sign']
# response = request.urlopen(data)#发送请求,并将得到的响应放入response
response = request.urlopen(URL,data) #发送请求,并将得到的响应放入response
html = response.read().decode('utf-8') #对网页内容读取并进行解码(从网页控制台源码中可以看到网页的编码方式)
translate_results = json.loads(html) #得到的是json类型数据
print("translate_results(json数据):",translate_results)
translate_results = translate_results['trans_result'][0]['dst'] #提取json数据中的翻译结果
print('翻译结果为:',translate_results)
return translate_results
def leftClick1(event): #翻译按钮的具体功能
src_str = Entry1.get() #得到用户输入的需要翻译的内容
print('src_str:',src_str)
vText = translate_word(src_str)
Entry2.config(Entry2,text = vText)
Entry2.insert(0,str(vText))
def leftClick2(event): #清空按钮的具体功能
Entry1.delete(0,END) #END必须大写
Entry2.delete(0,END)
#GUI设计部分:
if __name__ == "__main__":
root = Tk()
root.title("单词翻译器")
root["width"] = 250
root["height"] = 130
Label(root,text = "输入要翻译的内容:",width = 15).place(x = 1,y = 1) #绝对坐标(1,1)
Entry1 = Entry(root,width = 20) #添加一个文本框
Entry1.place(x = 110,y = 1)
Label(root,text = "翻译的结果:",width = 18).place(x = 1,y = 20) #绝对坐标(1,1)
Entry2 = Entry(root,width = 20) #添加一个文本框
Entry2.place(x = 110,y = 20)
Button1 = Button(root,text = "翻译",width = 8)
Button1.place(x = 40,y = 80)
Button2 = Button(root,text = "清空",width = 8)
Button2.place(x = 110,y = 80)
Button1.bind("<Button-1>",leftClick1) #将按键和事件绑定
Button2.bind("<Button-1>",leftClick2)
root.mainloop()
四、最后
后面还会有一片关于调用百度语音api的分享,但是那个还在研究中,笔者把那个搞清楚了,第一时间分享给大家
其他百度API 系列的调用参见https://blog.csdn.net/weixin_45386875/article/details/113705329