啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!
這正是應用程式程式設計介面(Application Programming Interface,API)的用處,它為不同的應用提供了友好方便的介面。不同開發者不同的架構,甚至不同的程式語言也沒問題。這就實現了不同軟體進行資訊共享。
儘管不同的軟體應用都有不同的API,但API卻經常被理解成”網路應用API”,一般情況下,程式設計師通過HTTP協議向API發起某種請求,API會用XML(可擴充套件標記語言,Extensible Markup Language)或者JSON((JavaScriptObject Notation,JS 物件簡譜)格式返回響應的資訊。但JSON目前是資料傳輸的主流選擇。
下面我用百度翻譯開放平臺的API為例介紹API如何使用。
進群:548377875 可以獲取小編精心準備的全套教程視訊以及PDF呢!
百度一下就可以看到它的官網了,進入官網,登入百度賬號。
百度翻譯開放平臺提供4種服務,通用翻譯API/定製化翻譯API/拍照翻譯SDK/語音翻譯SDK,選擇通用翻譯API>立即使用>填寫一下相關資訊,就可以使用平臺提供的通用翻譯了!
當你完成上述步驟後,平臺會給你appid和金鑰,假設,為了後來的程式設計方便。我們設你在平臺得到的如下:
Appid=2018110856362537 secretKey =BVEY239HCDSUH
我隨便輸入的,切勿當真,僅僅是演示。
按照教程,通用翻譯API有HTTPS和HTTP地址,我們就用HTTPS地址:
https://fanyi-api.baidu.com/api/trans/vip/translate
使用POST或者GET方法傳遞以下欄位,我使用的是GET方法。
其中q是url編碼過的字元,python可提供url編碼
from urllib.parse import quote w='蜀中無大將,廖化作先鋒' q=quote(w) print(q)
得到這樣的字串:
%E8%9C%80%E4%B8%AD%E6%97%A0%E5%A4%A7%E5%B0%86%EF%BC%8C%E5%BB%96%E5%8C%96%E4%BD%9C%E5%85%88%E9%94%8B
From是翻譯源語言,這裡是中文,值為zh,目標語言to,翻譯成英語,值為en
其他語言列表部分如下:
語言簡寫
名稱
auto
自動檢測
zh
中文
en
英語
yue
粵語
wyw
文言文
jp
日語
kor
韓語
fra
法語
spa
西班牙語
Salt是隨機數,要求整型,可以使用random庫的randint函式。Sign是簽名,使用md5演算法生成的32位簽名,如下。
from random import randint from hashlib import md5 salt = randint(32768, 65536) myu = appid + w + str(salt) + secretKey m1 = md5() m1.update(myu.encode('utf-8')) sign = m1.hexdigest()
假定salt=43716,Appid=2018110856362537,SecrectKey=BVEY239HCDSUH,w='蜀中無大將,廖化作先鋒',那麼結果是:
myu=’2018110856362537蜀中無大將,廖化作先鋒43716BVEY239HCDSUH’
sign='88803b93d8f72a1a0e3daecb202f59f9'
最後組裝連結,使用get,那麼完整的連結如下:
url = 'https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+ str(salt) + '&q=' + urlq + '&sign=' + sign
最後要做的就是使用python的網路請求啦,和爬蟲一樣的方法。我直接放完整程式碼吧,如下:
from hashlib import md5 from random import randint import json appid = '201811085636253' secretKey = 'BVEY239HCDSUH ' w='蜀中無大將,廖化作先鋒' q=quote(w) salt = randint(32768, 65536) myu = appid + w + str(salt) + secretKey m1 = md5() m1.update(myu.encode('utf-8')) sign = m1.hexdigest() url = 'https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+ str( salt) + '&q=' + q + '&sign=' + sign a = urlopen(url) b = a.read() bb = b.decode('UTF-8') pyobj=json.loads(bb) if "error_code" in pyobj: print( "error_code:"+pyobj["error_code"]+' error_msg:'+pyobj['error_msg']) else: dst = pyobj['trans_result'][0]['dst'] print(dst)
請改動appid和secretKey後再演示,得到
Thereare no generals in Shu and Liao as pioneers.
值得注意的是,百度翻譯開放平臺規定:
2.qqbot
qqbot 是一個用 python 實現的、基於騰訊SmartQQ (網頁qq)協議的 QQ 機器人框架,可執行在 Linux 、 Windows 和 Mac OSX 平臺下。使用pip install qqbot安裝
本專案 github 地址: https://github.com/pandolia/qqbot
其實qqoot挺簡單的,如下:
from qqbot import QQBotSlot as qqbotslot,RunBot @qqbotslot def onQQMessage(bot, contact, member, content): nr = str(content) fy='你在說:'+nr bot.SendTo(contact, fy) if __name__ == '__main__': RunBot()
這段程式碼執行,出現一個二維碼,務必使用QQ小號掃描二維碼,當你給機器人發訊息的時候它的回覆就是 你在說:+你發的訊息,值得注意的是,機器人加QQ群出現的新訊息機器人也會回覆!
注意,上面註冊的響應函式的函式名必須為“onQQMessage”,函式引數也必須和上面的一致!
3.結合
我們把翻譯的程式改寫封裝成一個函式,再加入QQ機器人模組,如下
from urllib.parse import quote from urllib.request import urlopen from hashlib import md5 from random import randint import json from qqbot import QQBotSlot as qqbotslot,RunBot import re def ch2en(ch): "使用百度翻譯API把中文翻譯成英文" cha=re.sub('s','',ch) if len(cha)==0: return '請認真對待翻譯,別發圖片,空白等等' appid='你的appid' secretKey = '你的金鑰' urlq=quote(ch,encoding='UTF-8') salt = randint(32768, 65536) myu=appid+ch+str(salt)+secretKey m1=md5() m1.update(myu.encode('utf-8')) sign=m1.hexdigest() url='https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+str(salt)+'&q='+urlq+'&sign='+sign a=urlopen(url) b=a.read() bb=b.decode('UTF-8') pyobj = json.loads(bb) if "error_code" in pyobj: return "error_code:"+pyobj["error_code"]+' error_msg:'+pyobj['error_msg'] else: dst = pyobj['trans_result'][0]['dst'] return dst @qqbotslot def onQQMessage(bot, contact, member, content): nr = str(content) fy=ch2en(nr) bot.SendTo(contact, fy) if __name__ == '__main__': RunBot()
再次提醒,執行前修改appid和金鑰。
突然發現我做的這樣的機器人比單純的在網頁上翻譯好多了,一不小心又讓你裝了一個漂亮的逼,哈哈哈
而且這個也是一個學英語的好工具,我經常使用它翻譯長難句。
最後,我放一個問題,做為使用API的一點心得:
如何把微信的零錢轉到支付寶的餘額上?