搜尋此網誌

2011/07/08

用Delphi 2010存取Plurk API 1.0

噗浪有提供一組API可供開發人員存取,目前穩定的版本是1.0版,2.0版也開放測試了,本文是針對1.0版撰寫。
關於API呼叫,Delphi常常是被排擠在外的小眾,熱血的人通常是要自己來啊。


Plurk API 1.0版使用JSON,而在Delphi 2010中有內建JSON的支援,不過我個人覺得超級難用....怎麼弄出這麼難用的東西的? 第一個遇到的問題就是如何把一個JSON的字串物件化,弄了老半天老是弄不起來。後來也懶得研究了之換個方式解決它。

雖然1.0的規格可能會被停用,不過在認證後的呼叫基本上不會有太大的差異。
要使用Plurk API,要先要有API Key,該Key可在上面的連結中申請到。任何呼叫都要API Key。一個API Key預設限制是每天可呼叫50,000次。

登入Plurk:
/API/Users/login中有表明,要帶API Key,使用者名稱和密碼:

http://www.plurk.com/API/API/Users/login
其中帶的參數為:
api_key
username
password
將這些東西組合和,用IdHTTP元件連線,此元件必需串CookieManager:

rets := HTTP.Get('http://www.plurk.com/API/API/Users/login?api_key=你的key&username=帳號&password=密碼');

這時API會回傳Profile JSON化後的資料,以及cookie,該cookie必需留著以便後面使用:
我用的Indy元件是2.5.8版的,Cookie的取得(偷懶不作檢查)的方式如下:

Cookies := HTTP.CookieManager.CookieCollection.Cookies[0].CookieText;

再來要把取得的Cookie放進HTTP檔頭中,方便後面呼叫:


HTTP.Request.customHeaders.Clear ;
HTTP.Request.customHeaders.Add( Cookies ) ;


登入後噗浪會傳回使用者資料,下面的例子是取得朋友和粉絲的數量。這邊JSON用到的是一個叫SuperObject的東西,使用起來直覺,比內建的好用太多了,內建的我老是用不習慣。

var
  obj, obj1, obj2 : ISuperObject;

.
.
由上幾行取得的rets字串,轉為JSON:

obj := SO(rets);  //一行搞定

obj1 := obj.AsObject['user_info']; //取得使用者相關資料
friends_count := obj2.AsObject.I['friends_count']; //取得朋友數
fans_count  := obj2.AsObject.I['fans_count']; //取得粉絲數

如此簡單的就可以取得噗浪傳回的資料!


登出:
Ts是一個TStringList類別。

TS.Add('api_key=' + API_KEY);
rets := HTTP.Post(getApiUri(''http://www.plurk.com/API/API/Users/logout), Ts);

沒有留言: