小白學Python項目實踐 百度翻譯API調用(二)

歷經許多磨難終於把簡單的百度翻譯小程序寫出來了,不多說,先貼上代碼及效果圖:

#-*- 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。

最終效果圖:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章