基於百度通用翻譯API的一個翻譯小工具

前幾天寫了一個簡單的翻譯小工具,是基於有道翻譯的,不過那個翻譯接口有訪問限制,超過必定次數後會提示訪問過於頻繁,偶然發現百度翻譯API若是月翻譯字符少於200萬是不收取費用的,因此就註冊了一個百度開發者帳號,把當前翻譯接口替換爲百度翻譯接口。json

1.首先註冊一個百度我的開發者帳號api

http://api.fanyi.baidu.com/api/trans/product/indexapp

註冊完成後會獲得一個APP ID和密鑰dom

2.打開「文檔與支持/通用翻譯API技術文檔」函數

這裏面介紹瞭如何調用百度翻譯接口工具

下面是完整的代碼oop

第59行寫明如何調用百度翻譯API以及參數的構造方法,同時相對以前的版本,修改了下頁面按鈕的佈局佈局

  1 # -*- coding:utf-8 -*-
  2 
  3 import requests
  4 from requests.exceptions import RequestException
  5 import tkinter as tk
  6 from tkinter import ttk
  7 import hashlib
  8 import random
  9 
 10 class Translate():
 11     def __init__(self):
 12         self.window = tk.Tk()  #建立window窗口
 13         self.window.title("簡易翻譯器")  # 定義窗口名稱
 14         # self.window.resizable(0,0)  # 禁止調整窗口大小
 15         self.menu = ttk.Combobox(self.window,width=6)
 16         self.input = tk.Entry(self.window, width=80)  # 建立一個輸入框,並設置尺寸
 17         self.info = tk.Text(self.window, height=20)   # 建立一個文本展現框,並設置尺寸
 18 
 19         self.menu['value'] = ('轉成繁體中文','轉成英文', '轉成日文', '轉成韓文', '轉成阿拉伯文')
 20         self.menu.current(0)
 21 
 22         # 添加一個按鈕,用於觸發翻譯功能
 23         self.t_button = tk.Button(self.window, text='翻譯', relief=tk.RAISED, width=8, height=1, command=self.fanyi)
 24         # 添加一個按鈕,用於觸發清空輸入框功能
 25         self.c_button1 = tk.Button(self.window, text='清空輸入', relief=tk.RAISED, width=8, height=1, command=self.cle_e)
 26         # 添加一個按鈕,用於觸發清空輸出框功能
 27         self.c_button2 = tk.Button(self.window, text='清空輸出', relief=tk.RAISED,width=8, height=1, command=self.cle)
 28         # 添加一張圖標
 29         self.image_file = tk.PhotoImage(file='py128.png')
 30         self.label_image = tk.Label(self.window, image=self.image_file)
 31 
 32     def gui_arrang(self):
 33         """完成頁面元素佈局,設置各部件的位置"""
 34         self.input.grid(row=0,column=0,padx=5,pady=5)
 35         self.info.grid(row=1,rowspan=2,column=0,padx=5,pady=5)
 36 
 37         self.t_button.grid(row=0,column=1,padx=5,pady=5,sticky=tk.W)
 38         self.c_button1.grid(row=0,column=2,padx=0,pady=5,sticky=tk.W)
 39         self.c_button2.grid(row=0,column=3,padx=5,pady=5,sticky=tk.W)
 40 
 41         self.menu.grid(row=1, column=1, padx=5, pady=5, rowspan=2, sticky=tk.NW)
 42 
 43         self.label_image.grid(row=2, column=1,columnspan=3,sticky=tk.N)
 44 
 45     def tran_type(self):
 46         type = None
 47         if self.menu.get() == "轉成繁體中文":
 48             type = "cht"
 49         if self.menu.get() == "轉成英文":
 50             type = "en"
 51         elif self.menu.get() == "轉成日文":
 52             type = "jp"
 53         elif self.menu.get() == "轉成韓文":
 54             type = "kor"
 55         elif self.menu.get() == "轉成阿拉伯文":
 56             type = "ara"
 57         return type
 58 
 59     def fanyi(self):
 60         """定義一個函數,完成翻譯功能"""
 61 
 62         original_str = self.input.get()  # 定義一個變量,用來接收輸入框輸入的值
 63         appid = 'XXXX'  # 你的appid
 64         secretKey = 'XXXX'  # 你的密鑰
 65 
 66         salt = random.randint(32768, 65536)   # 生成一個隨機數
 67         sign = appid + original_str + str(salt) + secretKey  # 將appid和要翻譯的字符、隨機數、密鑰組合成一個原始簽名
 68         m = hashlib.new("md5")  
 69         m.update(sign.encode(encoding="utf-8"))  # 注意使用utf-8編碼
 70         msign = m.hexdigest() # 獲得原始簽名的MD5值
 71 
 72         data = {
 73             "q": original_str,   
 74             "from": "auto",
 75             "to": self.tran_type(),
 76             "appid": appid,
 77             "salt": salt,
 78             "sign": msign
 79         }
 80         url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
 81         try:
 82             r = requests.get(url, params=data)
 83             if r.status_code == 200:
 84                 result = r.json()
 85                 translate_result = result["trans_result"][0]["dst"]
 86                 self.info.delete(1.0, "end")  # 輸出翻譯內容前,先清空輸出框的內容
 87                 self.info.insert('end',translate_result)  # 將翻譯結果添加到輸出框中
 88         except RequestException:
 89             self.info.insert('end', "發生錯誤")
 90     def cle(self):
 91         """定義一個函數,用於清空輸出框的內容"""
 92         self.info.delete(1.0,"end")  # 從第一行清除到最後一行
 93 
 94     def cle_e(self):
 95         """定義一個函數,用於清空輸入框的內容"""
 96         self.input.delete(0,"end")
 97 
 98 def main():
 99     t = Translate()
100     t.gui_arrang()
101     tk.mainloop()
102 
103 if __name__ == '__main__':
104     main()

最終效果以下ui

ps.下面是通用翻譯API服務的使用詳情,天天都會統計編碼

相關文章
相關標籤/搜索