小白学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。

最终效果图:
在这里插入图片描述
在这里插入图片描述

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