酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Facebookへ投稿をしよう!〜基本データの取得とステータスの投稿〜

Windows Phone Advent Calendar "ひとり" 2011」第9日目です。

9日目ギリギリや……(23:30)

昨日は、Facebook C# SDKの導入と認証を行いました。今日は基本データの取得とステータスの投稿を行います。

**基本データの取得

基本データ……つまりログインした自分自身のアカウント情報を取得します。取得出来るデータはアカウントIDや名前、性別です。

|cs| // 基本データの取得 FacebookClient client = new FacebookClient(accessToken); client.GetCompleted += client_GetCompleted; client.GetAsync("me"); ||<

非同期で基本データの取得完了イベントを受信します。e.GetResultDataメソッドで取得したオブジェクトをIDictionary<string, object>型にキャストします。それぞれのパラメータでデータが取得できます。

|cs| void client_GetCompleted(object sender, FacebookApiEventArgs e) { var data = e.GetResultData() as IDictionary<string, object>;

// ログインしたアカウントのIDを取得
var id = (string)data["id"];

// ログインしたアカウントの名前を取得
var name = (string)data["name"];

// 性別を取得
var gender = (string)data["gender"];

// タイムゾーンを取得(日本は+9なので9が返ってくる)
var timezone = (long)data["timezone"];

// 言語を取得(日本はja_JPが返ってくる)
var locale = (string)data["locale"];

// ログインしたアカウントのprofileページを取得
var link = (string)data["locale"];

Dispatcher.BeginInvoke(() => {
    textName.Text = name;
});

} ||<

アカウント名にモザイクを入れており、分かりにくいですが基本データの取得が出来ました。

**ステータスの投稿

ウォールにステータスを投稿します。FacebookClient型のインスタンスを生成して、AccessTokenプロパティに取得したアクセストークンを設定します。

Dictionary<string, object>型のディクショナリーに、messageのキーにstring型でステータスを設定して、FacebookClient.PostAsyncメソッドで送信します。

|cs| // ステータスを共有する private void btnIconShare_Click(object sender, EventArgs e) { var client = new FacebookClient() { AccessToken = accessToken }; var param = new Dictionary<string, object>();

// ステータス
param["message"] = "テスト投稿です。";

// Facebookでリンクを共有する
client.PostCompleted += client_PostCompleted;
client.PostAsync("me/feed", param);

}

void client_PostCompleted(object sender, FacebookApiEventArgs e) {

if (e.Error != null) {
    // なんらかのエラー発生時
    Dispatcher.BeginInvoke(() => {
        MessageBox.Show(e.Error.Message);
    });
    return;
}

var data = e.GetResultData() as IDictionary<string, object>;
Dispatcher.BeginInvoke(() => {
    MessageBox.Show("success post status.");
});

} ||<

エラーが発生しなければe.Errorがnullで返ってきますので、成功のメッセージボックスを表示させています。

***エラー(The user hasn't authorized the application to perform this action.)発生時

ステータスの投稿時に以下のエラーが発生してしまいました。

(OAuthException) (#200) The user hasn't authorized the application to perform this action. <<

どうやら指定したアクション(自分のフィードへの投稿)を行うための権限が足りないようです。前回のログイン時に権限が足りていなかったようでしたので、status_updateを追加して再ログインします。

|cs| //prams["scope"] = "user_about_me,user_photos,offline_access"; prams["scope"] = "user_about_me,user_photos,offline_access,status_update"; ||<

これでステータスの投稿が出来ると思います。