Python 使用有道翻譯API

2022-08-21 05:42:14 字數 3753 閱讀 4747

想寫乙個給自己記錄背單詞狀況的軟體,需要獲取英文單詞的中文釋義(基本功能)。考慮使用有道翻譯的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...