想寫乙個給自己記錄背單詞狀況的軟體,需要獲取英文單詞的中文釋義(基本功能)。考慮使用有道翻譯的api實現獲取英文單詞的中文釋義的方法。
需要在 youdao 開發者站點獲取api_key,其實獲取的過程還是很容易的。
以前寫好了乙個 英文本典的基類,把api_key直接寫到**裡面是不好的,為了做到程式與資料分離,該類實現了通過直接獲取、通過url獲取和通過配置檔案獲取3種方式匯入api_key。該類的**:basicdict.py,並且依賴乙個處理配置檔案的類:configfile.py ,我們使用的這個基類具有以下的功能和特性:
在這裡我們還要實現:
下面我們將介紹如何實現上述的兩個功能,以及繼續保持特性「支援python2&3」。
在定義這個類的時候,是要繼承基類basicdict的:
from basicdict import basicdict
class youdao_api(basicdict):
# ...
在初始化過程中,獲取api_key的過程已經在基類中的init函式中完成了,所以在定義新的init函式的時候,呼叫基類的函式:
def __init__(self, api_key = 'default',api_url= 'default',api_path = "default", name='youdao'):
super(youdao_api, self).__init__(api_key, api_url,api_path,name)
pass
可以看到在對name變數初始化的時候,命名為'youdao'了,終於有了乙個有意義的名字了。
另外定義了幾個變數:
class youdao_api(basicdict):
url_preffix = ""
url_suffix = "&type=data&doctype=json&version=1.1&q="
current_json_text = ''
current_error_code = 0
12-11-2016更新!!
我發現了乙個問題,在
url_preffix = ""
這個語句裡面,youdaoword 是我自己申請api時候的應用名稱
別人申請的應該不是這個名稱
自己用的時候一定要換成自己的!!
兩個和url有關的變數使用在網路請求中,current_json_text為儲存當前的json文字內容,而current_error_code儲存當前的錯誤**,預設值為0,就是沒有錯誤,以上兩個變數會在每次獲取新的詞的json內容時候更新。
網路請求通過requests模組完成,其**如下:
def get_json(self,word, print_json = false):
url = self.get_url(word)
net_request = requests.get(url)
json_content = net_request.text
self.current_json_text = json_content
if print_json:
print(json_content)
pass
self.check_api_key(json_content)
return json_content
def get_url(self,word,print_url = false):
url = self.url_preffix + self.api_key + self.url_suffix + self.urlencode(word)
if print_url:
print(url)
pass
return url
另外對於中文,不能直接在url中使用中文字元,要進行urlencode,這裡需要根據python版本不同呼叫不同的函式:
def urlencode(self,word,print_result = false):
if sys.version_info <= (2,8):
# in python 2
import urllib
encoded_word = urllib.quote(word)
pass
elif sys.version_info <= (3,8):
# in python 3
from urllib.parse import quote
encoded_word = quote(word)
pass
else:
pass
if print_result:
print(encoded_word)
return encoded_word
pass
關於判斷python版本的詳細說明,檢視這裡(博文待完成)。
注意在這個方法中還呼叫了檢查api_key有效性的函式,根據的是:
如果api_key無效,那麼後續的操作顯然無法繼續進行,所以會丟擲異常,函式實現如下:
def check_api_key(self,json_text, print_code = false):
json_content = json.loads(json_text)
code = json_content['errorcode']
if print_code:
print(code)
pass
if code == 50:
msg = 'invalid ' + self.name + ' api_key!'
raise runtimeerror(msg)
self.current_error_code = code
pass
這幾個函式實現了通過有道的api獲取與查詢詞有關的json文字的功能。
寫了個主函式測試一下:
def main():
e = youdao_api()
print(e.name)
print(e.api_key)
e.get_url('數學',print_url = true)
json_text = e.get_json('數學')
print(json_text)
# e.check_api_key('')
pass
if __name__ == "__main__":
main()
結果: python 有道翻譯 api介面
最近有乙個呼叫 有道詞典 api介面 的需求,就有了如下的 通過在 執行以下操作獲取 1.註冊賬號 2.建立應用 3.建立例項 4.應用繫結物件 secretkey ap2iyfaaadurymr4q7l8u73zgoc9vosz 中譯英 fromlang zh chs 譯文主體 tolang en...
python有道翻譯 Python版有道翻譯
做過爬蟲的朋友應該很通俗易懂,話不多說 亮 吧。需要用到的模組 urllib time hashlib random json code encoding utf 8 author search plugname youdaodict import urllib.request import url...
python 嘗試有道翻譯
乙隻小白的爬蟲,寫了乙個簡單 有道翻譯 記錄一下,如果大家有更好的方式 方法記得分享一下哦!coding utf 8 import urllib,urllib2,json url 有道翻譯 def translation word data data urllib.urlencode data en...