历经许多磨难终于把简单的百度翻译小程序写出来了,不多说,先贴上代码及效果图:
#-*- coding: UTF-8 -*-
from tkinter import *
import parse
# import sys
# sys.path.append('D:\\MyPython\\Lib\\urllib\\parse.py')
from urllib import request
import json
import hashlib
# 0:Chinese to English 1:English to Chinese
def translate_Word(en_str,languages):
URL = "http://api.fanyi.baidu.com/api/trans/vip/translate"
Form_Data = {}
Form_Data['from'] = 'auto'
if(languages==0):
Form_Data['to'] = 'en'
elif(languages==1):
Form_Data['to'] = 'zh'
Form_Data['q'] = en_str
Form_Data['appid'] = '20191112000356164'
Form_Data['salt'] = '1435660288'#
Key = "fpY29Wm1w4S7rhhUa3TX"
# 生成方法:
# Step1、将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)
# 按照 appid+q+salt+密钥 的顺序拼接得到字符串1。
# Step2、对字符串1做md5,得到32位小写的sign。
# 注:
# 1、待翻译文本(q)需为UTF-8编码
# 2、在生成签名拼接 appid+q+salt+密钥 字符串时,q不需要做URL encode,在生成签名之后,发送HTTP请求之前才需要对要发送的待翻译文本字段q做URL encode。
m = Form_Data['appid'] + en_str + Form_Data['salt'] + Key
m_MD5 = hashlib.md5(m.encode('utf-8'))
Form_Data['sign'] = m_MD5.hexdigest()
print(Form_Data)
data = parse.urlencode(Form_Data).encode('utf-8')
response = request.urlopen(URL,data)
html = response.read().decode('utf-8')
translate_result = json.loads(html)
print(translate_result)
translate_results = translate_result['trans_result'][0]['dst']#{"from":"en","to":"zh","trans_result":[{"src":"apple","dst":"\u82f9\u679c"}]},这是数据返回格式,有个列表,所以[0]
print("翻译的结果是:%s"%translate_results)
return translate_results
def leftClick(event):
en_str = Entry1.get()
# print(en_str)
language=v.get()
# print(v.get())
vText = translate_Word(en_str,language)
Entry2.delete(0,END) #每次翻译新的内容,清空翻译结果文本框
Entry2.config(Entry2,text=vText)
s.set("")
Entry2.insert(0,vText)
def leftClick2(event):
Entry2.delete(0,END)
def callRadiobutton():
if v.get()==0:
print('Chinese to English')
else:
print('English to Chinese')
# print(type(v.get()))
if __name__ == "__main__":
root = Tk()
root.title("单词翻译器")
root.geometry("500x400")
v=IntVar()
v.set(0)
choise = [('Chinese to English',0),('English to Chinese',1)]
Label(root,text='输入要翻译的内容:').place(x=1,y=1)
Entry1=Entry(root,width=100) #width 是设置文本框的横向宽度
Entry1.place(x=110,y=1)
Label(root,text='翻译结果:',width=18).place(x=1,y=40)
s=StringVar()
s.set("翻译结果")
Entry2=Entry(root,width=100,textvariable=s)
Entry2.place(x=110,y=40)
Button1=Button(root,text='翻译',width=8)
Button1.place(x=40,y=80)
Button2=Button(root,text='清空',width=8)
Button2.place(x=110,y=80)
#生成选择从什么语言翻译为什么语言
for convert_choise,num in choise:
Radiobutton(root, text=convert_choise, value=num, command=callRadiobutton,variable=v).place(x=40,y=120+num*30)
Button1.bind("<Button-1>",leftClick)
Button2.bind("<Button-1>",leftClick2)
root.mainloop()
调用百度API流程
具体技术文档操作参考[http://api.fanyi.baidu.com/api/trans/product/index],以下截取了部分流程
接入方式
通用翻译API通过HTTP接口对外提供多语种互译服务。您只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。
通用翻译API HTTP地址:
http://api.fanyi.baidu.com/api/trans/vip/translate
通用翻译API HTTPS地址:
https://fanyi-api.baidu.com/api/trans/vip/translate
请求方式:可使用GET或POST方式,如使用POST方式,Content-Type请指定为:application/x-www-form-urlencoded
字符编码:统一采用UTF-8编码格式
签名生成方法: 签名是为了保证调用安全,使用MD5算法生成的一段字符串,生成的签名长度为32位,签名中的英文字符均为小写格式。
Step1、将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)按照 appid+q+salt+密钥 的顺序拼接得到字符串1。
Step2、对字符串1做md5,得到32位小写的sign。
注:
1、待翻译文本(q)需为UTF-8编码
2、在生成签名拼接 appid+q+salt+密钥 字符串时,q不需要做URL encode,在生成签名之后,发送HTTP请求之前才需要对要发送的待翻译文本字段q做URL encode。
最终效果图: