Monday, November 22, 2010

[Facebook] C# SDK 取得資料範例

前一篇介紹了Faacebook官方 C# SDK的認證部分,這篇來用取得Friend List作為範例,介紹如何取用Facebook資料。

取得Facebook資料,是使用官方提供的Graph API,使用的話基本上相當的簡單,選擇你要取得哪種資料,然後將access_token帶上就可以了,如果要取得好友名單的話,就是直接拉下面這個網址的值就好。
https://graph.facebook.com/me/friends?access_token=...


Facebook的Graph API回應都是以JSON型態表示,像是下面這樣
{
   "data": [
      {
         "name": "Heineken",
         "id": "500078123"
      },
      {
         "name": "Stolichnaya",
         "id": "504027123"
      },
      {
         "name": "Johnny Walker",
         "id": "516035123"
      }
   ]
}



使用Facebook C# SDK呼叫的方法如下,在取得access_token後使用SDK去呼叫。
Facebook.FacebookAPI api = new Facebook.FacebookAPI(access_token);
JSONObject meFriends = api.Get("/me/friends");



取得的JSONObject很聰明,格式會隨著取得的資料改變,取得friends的格式會像下面這樣
Dictionary<string,Array[Dictionary<string,string>]>



然後將資料取出後就可以自行運用了,我只有簡單的放在表格裡而已。
Facebook SDK 04



取用的語法大致如下,Token就是之前取得的access_token。
Facebook.FacebookAPI api = new Facebook.FacebookAPI(Token);
        JSONObject meFriends = api.Get("/me/friends");

        DataTable dt = new DataTable();
        dt.Columns.Add("icon", typeof(string));
        dt.Columns.Add("id", typeof(string));
        dt.Columns.Add("name", typeof(string));

        for (int i = 0; i < meFriends.Dictionary["data"].Array.Length; i++)
        {
            dt.Rows.Add("https://graph.facebook.com/" +
                        meFriends.Dictionary["data"].Array[i].Dictionary["id"].String + "/picture",
                        meFriends.Dictionary["data"].Array[i].Dictionary["id"].String,
                        meFriends.Dictionary["data"].Array[i].Dictionary["name"].String);
        }

        GridView1.DataSource = dt;
        GridView1.DataBind();



如果是取likes的資料,結果就長得像下面。



基本上使用Facebook C# API取得資料還蠻簡單的,就看取得資料後要怎麼運用了。

6 comments:

  1. 請問在表格內 大頭貼那一欄 我顯示的是一段網址

    而不是圖片 請問為什麼會這樣@@

    ReplyDelete
  2. 因為...那個網址是圖片的網址,我只是把它直接顯示成圖片,不是原本的網址。

    ReplyDelete
    Replies
    1. 不好意思,請問如何把網址傳回圖片?

      Delete
    2. 我是直接把圖片網址塞到img url內

      Delete
  3. 請問要如何才能抓到登入的使用者名單 謝謝

    ReplyDelete