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

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