The Old Blog Archive (Traditional Chinese), 2004-2009

ObjectiveFlickr,一套簡單的Flickr API框架(中文)

做了一套很簡單的Objective-C Flickr API,取名做ObjectiveFlickr。原始程式碼放在Google Code上面,可以從這裡取得

程式碼是用BSD授權公開的,請自由取用。其中還用到了Andreas Meingast的CocoaCryptoHasing來為NSString增加md5計算功能(Objective-C的category真好用),特此致謝。

程式碼裡面有附一個簡單的demo,如果你打算從原始碼自己建,你得先在ObjectiveFlickrDemoDelegate.m裡填進你自己的Flickr API key跟所謂的”shared secret”。萬一你忘了填,反正編譯也不會給你過。:)

我也預先建好了可直接使用的demo,放在這裡。當你按下Authenticate按鈕時,瀏覽器會打開,帶你到Flickr的授權頁面,授權的應用程式名稱叫FlickrVanilla…… 請原諒我最近越來越沒有命名的創意……

Demo展示的是Flickr API使用的必經程序。首先,你得先取得一個所謂的”frob”,再從frob合成Flickr授權頁面的URL,進到Flickr取得授權,然後回到demo app中取得所謂的authorization token。之後就可以憑此token取用各種Flickr API的服務(使用者訊息也在token裡面)。照片顯示是直接用Interface Builder拉一拉WebKit做出來的,還需要再美化就是了。

這個demo把Flickr API的呼叫拆成幾個部份,事實上在大多數Flickr桌面應用程式中,frob取得與進入授權頁面,是做成同一件事的。通常程式就直接打開瀏覽器,並用一個modal dialog box告訴使用者說,請授權完畢後再回到應用程式。

Flickr這樣做有個很棒的地方是,應用程式完全不用去管login logic。只要把之後取得的auth token先預存起來,下次打開應用程式時詢問token還有效就可以了,如果token失效了,只要再重跑一次frob取得以及授權的程序就可以。

當然,初見之下,這種作法有點不直觀。需要從API key及”shared secret”中計算出API call的簽章,自然也是為了防API abuse。

目前我還沒有把ObjectiveFlickr變成一個真正的OS X framework。目前程式庫的部份其實只有一個.h跟一個.m檔。Class也只有兩個。FlickrRESTURL是負責生出各種Flickr REST API的奇怪URL(有些還挺長的)。至於FlickrRESTRequest則包裝了NSURLConnection,並且使用Cocoa常見的非同步delegate模式,你先把request丟出去,再等著接收FlickrRESTRequest instance送回的訊息,訊息包括:網路傳輸中、資料傳輸取消、發生錯誤,或是正確載回了Flickr API的XML payload等等。我做了一些基礎的Flickr error code處理。

這兩個class構成一個相當「低階」的框架。Flickr API有一大部份是要處理那些傳回來的XML data block。目前我只做了token跟photos兩個data block的拆封動作。其他還有一大堆類似的資料得處理。

我們可以從這兩個「低階」的class出發,建立更「高階」的Flickr API framework,好比說,同步化的資料傳輸(亦即,要等API call完成才繼續下一個動作,而不是現在的async model),或是直接能寫像[flickr blogs_list]這種更直觀的API call,還有就是把送回的XML payload做更完整的拆解(例如轉換成我愛的NSDictionary資料結構等等)。

差不多就是這樣了。是有打算繼續開發下去,頭一步應該是把它變成真正的 .framework 吧。還有bug要修、做單元測試等等(async model真難debug…)。還有文件得寫。不過就先把它放出來了。如果有patch、有任何意見,或者想直接要svn commit權限,都非常歡迎的喔。

One Response to “ObjectiveFlickr,一套簡單的Flickr API框架(中文)”

  1. [...] http://lukhnos.org/blog/zh/archives/396 [...]