扇貝還是很不錯的背單詞系統,但是我一直不理解為什么官方提供的批量添加單詞頁面每次限制10個= =。 美劇黨隨手擠了很多單詞准備導入的時候,還有從有道單詞本導入的時候,都很尷尬。。查了一下,還沒有人寫過這方面的東西,所以嘗試着用python寫了個。
下載地址:http://pan.baidu.com/s/1bn93yft
github:https://github.com/yuchenlin/shanbayAddWords
扇貝API文檔:http://www.shanbay.com/developer/wiki/intro/
基本思路:
1.請求用戶授權
2.循環查詞 獲取詞的ID
3.循環添加到詞庫 (需要詞的ID)
功能很簡單,思路也很清晰,但是第一次接觸有關API的東西還是有點無從下手,於是看到了廖雪峰寫過的一個新浪微博API的小demo,理解了具體的原理。
A.關於獲取用戶授權
A.1 設置參數
demo創建了一個類叫做APIclient來集成了各種屬性,和各種get post方法的源頭,方便使用。
其中幾個重要的參數都可以簡單的搞定,比如app_key secret redirect_url 然后給用戶生成一個固定的引導授權地址。
A.2 獲取code
當用戶授權后,系統會自動根據回調地址回調code參數,如果設置成扇貝默認的回調地址,code部分直接顯示在url中,讓用戶copy回來給我就好了。。雖然不夠友好,但是也只能這樣了,畢竟要想自動的接收,最開始就要用python調用瀏覽器來打開這個授權網頁,這個感覺好像很麻煩。。
A.3 根據code生成token。
這個也直接寫在類里了,不過很簡單,按照文檔就一步,之后的所有操作都是根據token來和服務器進行身份識別的,所以很重要,而且每一步都要確認token是否過期。
B.get查詞
這個就很簡單了,不多說,主要的亮點是json的數據格式很好,import json之后,系統自動處理為dict類型,特別方便調用。
C.post填詞
更簡單,但是要判斷是否添加成功,畢竟不是每個詞都在詞庫里記錄了。
D.界面
tkinter 還是比較方便吧 但是在win和mac下尺寸不好調成一致,還有mac下輸入框中文不能輸入很鬧心。如果哪一天出現了和vs搞winform那么簡單無腦的IDE 我大概就離不開python了~
E.
也同時了解到了一個比較驚艷的python高級技巧,郁悶的是我不知道這個東西學名叫什么,從功能上來說,它實現了動態解析函數名的作用。
比如:
bdc_body = client.get.bdc__search(word=w)
這里的client.get 是這樣的
def __getattr__(self, attr): def wrap(**kw): if self.client.is_expires(): raise APIError('21327', 'expired_token', attr) url = '%s%s/' % (self.client.api_url, attr.replace('__', '/')) #print(url) return _http_call(url, self.method, self.client.access_token, **kw) return wrap
它以「__」作為分節符把函數名中的bdc和search作為字符串處理添加到了url中,把參數word=w當做attr字典傳入,進行調用http_call去進行連接。 這里完全把函數當做一個變量來處理,可以返回,這樣的操作使語言十分簡潔,漂亮~~