經常碰到不認識的英文單詞就去有道字典網頁去查檢視,每次的過程都是“開啟有道網頁->輸入單詞->檢視結果”,這個過程有點兒繁瑣。可是一直不厭其煩的這樣重複著,卻不想解決一下。。。直到在微博上面看到有個人利用有道翻譯API做了個命令列下面的小工具。可是他是用ruby寫的,對於Python空來說,這怎麼可以呢,於是自己寫一個吧,很簡單的。
有道翻譯API
http://fanyi.youdao.com/openapi?path=data-mode
在這裡簡單申請一個應用即可。因為這個API有每小時1000次的使用限制,如果都使用我的key就會出現使用次數超限的情況。可以自己申請一個以滿足自己的需求。
API使用很簡單,傳幾個引數做一個http請求,返回json格式的結果。
Python實現
具體實現可以看程式碼:https://github.com/veelion/tt
Python裡面做http請求的庫很多,最流行和簡便的是requests,最開始我也選擇了該庫。寫完執行的時候發現,總是要遲鈍一會兒才會出結果。懷疑是requests庫內部載入的東西太多,於是換urllib2的urlopen。
Python 2.7下叫urllib2,到了Python 3下面就沒有該包了,原來Python 3把它放到urllib.request裡面去了,為了讓這個小工具同時在2和3下面執行,於是有了這樣的程式碼:
try:
# For Python 3
from urllib.request import urlopen
from urllib.request import quote
except ImportError:
# For Python 2
from urllib2 import urlopen
from urllib import quote
選好http庫就寫一個函式來做翻譯工作:
def trans(q):
print('translating...')
url = ('http://fanyi.youdao.com/openapi.do?'
'keyfrom=%s&key=%s&type=data&'
'doctype=json&version=1.1&'
'q=%s') % (YOUDAO_KEYFROM, YOUDAO_KEY, quote(q))
try:
r = urlopen(url)
html = r.read()
data = json.loads(html)
if data['errorCode'] != 0:
print(html)
return
print(BRO) # 設定終端字型顏色
print("================================")
print(u"%s -> %s" % (data['query'], ','.join(data['translation'])))
if 'basic' in data:
if 'uk-phonetic' in data['basic']:
print(u"英式發音: %s" % data['basic']['uk-phonetic'])
print(u"美式發音: %s" % data['basic']['us-phonetic'])
for e in data['basic']['explains']:
print(u"%s" % e)
if 'web' in data:
print("")
for e in data['web']:
print(u"%s -> %s" % (e['key'], ','.join(e['value'])))
print("================================")
print(NOR) # 恢復終端字型顏色
except:
traceback.print_exc()
最後,程式從命令列引數得到要被翻譯的詞,呼叫翻譯函式即可:
if __name__ == '__main__':
from sys import argv
if len(argv) > 1:
q = argv[1]
trans(q)
以上就是實現翻譯小工具的全部過程,很適合初學python的練手實現一下。
安裝和使用
上面介紹了翻譯小工具的實現過程,如果你只是想使用的話,我已把它釋出到pypi上了,你只需使用pip命令安裝即可(linux安裝):
sudo pip install terminaltranslator
安裝程式會在/usr/local/bin/下面生成t和tt兩個簡潔命令工呼叫。
windowns使用者安裝:
pip install terminaltranslator
安裝程式會在python的根目錄Scripts裡生成t.exe和tt.exe 。
使用如下:
用python寫些小工具擴充閱讀:
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***