「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"; ||<
これでステータスの投稿が出来ると思います。