Windows PhoneでFacebook C# SDKを使って友達リストを取得する

By | 2013/12/23
Pocket

過去にFacebook C# SDKを利用して、SDKの導入からアカウントの認証、ステータスと写真の投稿の方法をご紹介しました。今回は、Facebook C# SDKを使って友達リストを取得してみましょう。

友達リストの取得タイミングですが、ここではテスト的にボタンを配置し、クリックイベントハンドラのbtn_Clickメソッドにて、FacebookClientインスタンスを生成して、友達リストの取得要求を非同期で実行します。

protected override void btn_Click(object sender, EventArgs e)
{
    // アクセストークンを取得する
    var accessToken = GetAccessToken();

    // FacebookClientインスタンスを生成
    var client = new FacebookClient(accessToken);
    client.GetCompleted 
        += new EventHandler<FacebookApiEventArgs>(client_GetCompleted);

    // ユーザーの友達リストを取得する
    client.GetAsync("me/friends");
}

サーバーからレスポンスが返ってくるとclient_GetCompletedメソッドが呼び出されます。GetResultDataメソッドで取得出来るレスポンスデータがobject型なので、データを扱いやすいようにDictionary型にキャストします。

友達リストは下記のようにJSON形式で返ってきます。配列の形で友達の名前と(Facebookでの)IDを取得することが出来ます。

{
  "data": [
    {
      "name": "Taro Osaka",
      "id": "529XXXXXXX"
    },
    {
      "name": "Jiro Tokyo",
      "id": "545XXXXXXXX"
    },
    {
      "name": "Hanako Hakata",
      "id": "5847XXXXXX"
    }, 
    〜省略〜

レスポンスからFacebook.JsonArray型で友達リストを取得します。取得した友達リストから友達の名前を取り出してリストへ表示しています。

void client_GetCompleted(object sender, FacebookApiEventArgs e)
{
    // エラーが発生した場合はメッセージボックスを表示する
    if (e.Error != null) {
        MessageBox.Show(e.Error.Message);
        return;
    }

    // データを扱いやすいようにDictionary型にキャストする
    var result = e.GetResultData() as IDictionary<string, object>;
    if (result == null) return;

    // レスポンスから友達リストを取得する
    var friends = result["data"] as Facebook.JsonArray;
    // 友達リストから友達の名前を取得
    var friendNames = friends.Select(item => {
            var user = item as Facebook.JsonObject;
            return user["name"];
    });

    Dispatcher.BeginInvoke(() => {
        // 友達の名前をリストに表示する
        listBox.ItemsSource = friendNames;
    });
}