歷經許多磨難終於把簡單的百度翻譯小程序寫出來了,不多說,先貼上代碼及效果圖:
#-*- 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。
最終效果圖: