1. 程式人生 > >基於百度通用翻譯API的一個翻譯小工具

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

digest 函數 清除 之前 file ram json 添加 msi

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

1.首先註冊一個百度個人開發者賬號

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

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

技術分享圖片

2.打開“文檔與支持/通用翻譯API技術文檔”

這裏面介紹了如何調用百度翻譯接口

技術分享圖片

下面是完整的代碼

第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()

最終效果如下

技術分享圖片

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

技術分享圖片

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