Tkinter+requests庫打造屬於你自己的翻譯軟件(一)

前期準備

運行庫

requests庫,用於進行百度api交互
tkinter庫,python自帶庫不需要另外下載
urlib庫,python自帶庫不需要另外下載
random庫, pyhthon自帶庫不需要另外下載

前期準備

請自行前往百度官網申請開發者API權限,這裏不再敘述。

通過查詢官方文檔我們可以知道,通過一個加密的 get 請求就可以向百度發出翻譯請求,具體構造如下:

url:百度請求網址http://api.fanyi.baidu.com/api/trans/vip/translate
appid:開發者 API 的 ID
q:經過處理的待翻譯內容
from:參數分爲 zh 與 en 表示翻譯前的語言類型
to:參數分爲 zh 與 en 表示翻譯後的語言類型
salt:隨機數
sign:數字簽名,裏面包含 appid 、待翻譯內容、隨機數、API密碼等字符串按順序拼接後的 md5 值

現在我們來一步一步用代碼構建這個看起來很複雜的請求鏈接

import hashlib
appid=你的開發者 ID 
key=你的開發者密鑰
translateword=待翻譯的內容
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'#基礎 API 接口地址
sign = appid + tranlateWord + salt + key#簽名值等於id+待翻譯內容+salt+key值
m = hashlib.md5()#初始化一個 hashlib 庫的 md5 類
m.update(sign.encode('utf-8'))#將之前的簽名進行 utf-8 編碼化
sign = m.hexdigest()#將 m 進行哈希化得到簽名值
myurl = url+'?appid='+self.appid+'&q='+urllib.parse.quote(tranlateWord,encoding = 'utf-8')+ '&from=' + self.fromLang + '&to=' + self.toLang + '&salt=' + str(self.salt) + '&sign=' + sign#生成請求網址

之後利用 requests 庫發出 get 請求,如果前面各項數據正確處理會返回一個 json 數據,通過自帶的 json 庫進行解析

import requests, json
response = requests.get(myurl)#發出請求
s = json.loads(response.text)#解析 json 數據
result = s['trans_result'][0]#輸出結果

這個就是百度翻譯 API 交互的核心內容,下面附上完整的爬蟲代碼

#coding=utf-8
import requests
import urllib
import json
import hashlib
import random
import re

class baiduapi: #定義一個百度翻譯的類

    def __init__(self): #初始化函數,對常用變量初始化
        self.enable = True
        self.sortLangue = ''
        self.fromLang = ''
        self.toLang = ''
        self.salt = str(random.randint(52330, 723831))
        self.appid = ''#百度api賬號
        self.key = ''#百度api密碼
        self.sign = ''#百度簽名

    def check(self, words): #定義檢查函數,檢測是否爲中文
        pattern = re.compile(r'[a-z]')#判斷是否含有字母,如果沒有則是純中文字符串
        match = pattern.search(words)
        if match:
            return True
        else:
            return False

    def getResult(self,tranlateWord):#輸入單詞進行翻譯,獲取結果

        url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
        sign = self.appid + tranlateWord + self.salt + self.key#簽名值等於id+待翻譯內容+salt+key值
        print(tranlateWord)
        m = hashlib.md5()
        m.update(sign.encode('utf-8'))
        sign = m.hexdigest()
        myurl = url+'?appid='+self.appid+'&q='+urllib.parse.quote(tranlateWord,encoding = 'utf-8')+ '&from=' + self.fromLang + '&to=' + self.toLang + '&salt=' + str(self.salt) + '&sign=' + sign#生成指定鏈接,返回值爲翻譯結果
        response = requests.get(myurl)
        s = json.loads(response.text)
        result = s['trans_result'][0]
        return(result['dst'])

    def translate(self, data=None):#入口函數,傳遞參數自動翻譯
        if(data):
            tranlateWord = data
        else:
            tranlateWord = str(input('輸入翻譯內容\n'))
        #print(data)#顯示輸入的數據內容
        self.sortLangue = self.check(tranlateWord)#通過返回值判斷是中譯英還是英譯中
        if (self.sortLangue):
            self.toLang = 'zh'
            self.fromLang = 'en'
        else:
            self.toLang = 'en'
            self.fromLang = 'zh'
        result = self.getResult(tranlateWord)
        print(result)
        return result

    def main(self):
        while self.enable: 
            self.translate()
if __name__=='__main__':
    baidu = baiduapi()
    baidu.main()

第二篇教學地址
第三篇教學地址
如有興趣或是需要更加詳細的指導請聯繫QQ:
723831904

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