1. 程式人生 > >啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

這正是應用程式程式設計介面(Application Programming Interface,API)的用處,它為不同的應用提供了友好方便的介面。不同開發者不同的架構,甚至不同的程式語言也沒問題。這就實現了不同軟體進行資訊共享。

儘管不同的軟體應用都有不同的API,但API卻經常被理解成”網路應用API”,一般情況下,程式設計師通過HTTP協議向API發起某種請求,API會用XML(可擴充套件標記語言,Extensible Markup Language)或者JSON((JavaScriptObject Notation,JS 物件簡譜)格式返回響應的資訊。但JSON目前是資料傳輸的主流選擇。

下面我用百度翻譯開放平臺的API為例介紹API如何使用。

 

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

 

進群:548377875  可以獲取小編精心準備的全套教程視訊以及PDF呢!

百度一下就可以看到它的官網了,進入官網,登入百度賬號。

百度翻譯開放平臺提供4種服務,通用翻譯API/定製化翻譯API/拍照翻譯SDK/語音翻譯SDK,選擇通用翻譯API>立即使用>填寫一下相關資訊,就可以使用平臺提供的通用翻譯了!

 

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

 

當你完成上述步驟後,平臺會給你appid和金鑰,假設,為了後來的程式設計方便。我們設你在平臺得到的如下:

Appid=2018110856362537
secretKey =BVEY239HCDSUH

我隨便輸入的,切勿當真,僅僅是演示。

按照教程,通用翻譯API有HTTPS和HTTP地址,我們就用HTTPS地址:

https://fanyi-api.baidu.com/api/trans/vip/translate

使用POST或者GET方法傳遞以下欄位,我使用的是GET方法。

 

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

 

其中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和金鑰。

 

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

 

啥年代了啊!誰還用翻譯軟體?我直接用Python自制的翻譯機器人!

 

 

突然發現我做的這樣的機器人比單純的在網頁上翻譯好多了,一不小心又讓你裝了一個漂亮的逼,哈哈哈

而且這個也是一個學英語的好工具,我經常使用它翻譯長難句。

最後,我放一個問題,做為使用API的一點心得:

如何把微信的零錢轉到支付寶的餘額上?