python调用百度api应用--小小翻译器,,urllib库的使用


urllib库的使用

urllib库是python标准库中最常用的PYthon网页访问的模块,它可以让用户像访问本地文本文件一样读取网页的内容。

urlib.request模块:用来打开和读取url

urlib.error模块:包含一些由urlib.request产生的错误,可用try进行捕捉

urlib.parse模块:包含一些解析url的方法

urlib.robotparser模块:用来解析robots.txt文本文件

案例小小翻译器:

设计思路:

1.使用百度翻译向http://api.fanyi.baidu.com/api/trans/vip/translate此url地址通过post方法发送6大请求参数来访问此服务----并生成签名和签名计算

2.进行格式转换并拿到json格式的数据结果--将签名转成utf8和将百度翻译url用utf8解码并读取,用json格式打开百度翻译url

3.单击翻译事件:获取用户输入--并进行翻译

跟踪变量值变化,并随时更新值显示在界面上

4.清空事件

5.界面布局设计

from tkinter import *

from urllib import request

from urllib import parse

import json

import hashlib

import random

def translate_Word(en_str):

URL = ‘http://api.fanyi.baidu.com/api/trans/vip/translate‘

#en_str=input("请输入要翻译的内容:")

#创建Form_Data字典,存储向服务器发送的Data

#Form_Data={‘from‘:‘en‘,‘to‘:‘zh‘,‘query‘:en_str,‘transtype‘:‘hash‘}

Form_Data = {}

Form_Data[‘from‘] = ‘en‘

Form_Data[‘to‘] = ‘zh‘

Form_Data[‘q‘] = en_str #要翻译数据

Form_Data[‘transtype‘] = ‘hash‘

Form_Data[‘appid‘] = ‘20151113000005349‘ #申请的APP ID

Form_Data[‘salt‘] = str(random.randint(32768, 65536)) #随机数

Key="osubCEzlGjzvw8qdQc41" #平台分配的密钥

m=Form_Data[‘appid‘]+en_str+Form_Data[‘salt‘]+Key

m_MD5 = hashlib.md5(m.encode(‘utf8‘))

Form_Data[‘sign‘] = m_MD5.hexdigest()

data = parse.urlencode(Form_Data).encode(‘utf-8‘) #使用urlencode方法转换标准格式

response = request.urlopen(URL,data) #传递Request对象和转换完格式的数据

html = response.read().decode(‘utf-8‘) #读取信息并解码

translate_results = json.loads(html) #使用JSON

print(translate_results) #打印出JSON数据

translate_results = translate_results[‘trans_result‘][0][‘dst‘] #找到翻译结果

print("翻译的结果是:%s" % translate_results) #打印翻译信息

return translate_results

def leftClick(event): #翻译按钮事件函数

#print( "x轴坐标:", event.x)

#print( "y轴坐标:", event.y)

en_str=Entry1.get() #获取要翻译的内容

print(en_str)

vText=translate_Word(en_str)

#Entry2.config(Entry2,text=vText) #修改提示标签文字

s.set("")

Entry2.insert(0,vText)

def leftClick2(event): #清空按钮事件函数

s.set("")

#Entry2.config(Entry2,text=vText) #修改提示标签文字

Entry2.insert(0,"")

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) #绝对坐标(110,1)

Label(root,text = ‘翻译的结果:‘,width=18).place(x=1,y=20) #绝对坐标(1,20)

s=StringVar() #一个StringVar()对象

s.set("")

Entry2=Entry(root,width=20,textvariable=s)

Entry2.place(x=110,y=20) #绝对坐标(110,20)

Button1=Button(root,text = ‘翻译‘,width=8)

Button1.place(x=40,y=80) #绝对坐标(40,80)

Button2=Button(root,text = ‘清空‘,width=8)

Button2.place(x=110,y=80) #绝对坐标(110,80)

#给Label绑定鼠标监听事件

Button1.bind("<Button-1>",leftClick) #翻译按钮

Button2.bind("<Button-1>",leftClick2) #清空按钮

root.mainloop()

python调用百度api应用--小小翻译器

评论关闭