Windows Phoneアプリケーション開発入門

第41回 Facebook C# SDKを使ってみよう!(2)

この記事を読むのに必要な時間:およそ 5 分

ステータスを投稿する,リンクを共有する

次にFacebook C# SDKを使用して,Facebookのウォールにステータスを投稿,またはリンクの共有をおこなってみましょう。

まず,ウォールにステータスを投稿するには,OAuthの認証処理で使用したパーミッションに「status_update」を追加する必要があります。

    var oauthClient = new FacebookOAuthClient { AppId = ApplicationID };
    var prams = new Dictionary<string, object>();
    prams["response_type"] = "code";
    prams["scope"] = "user_about_me,user_photos,offline_access";

prams["scope"]で設定しているパーミッションに「status_update」を追加します。

    var oauthClient = new FacebookOAuthClient { AppId = ApplicationID };
    var prams = new Dictionary<string, object>();
    prams["response_type"] = "code";
    prams["scope"] = "user_about_me,user_photos,offline_access,status_update";

ステータスを投稿する

FacebookClientインスタンスを生成して,アクセストークンを設定します。友達リストの取得と異なり,今回は投稿ですのでGetAsyncメソッドではなくPostAsyncメソッドを使用します。PostAsyncメソッドのパラメータに投稿したい情報を格納します。

具体的にはDictionary<string, object>型のディクショナリーを作成し,キーと値を設定します。ステータスだけ投稿できればよいので,以下のように「message」のキーに「テスト投稿です。」と値を設定します。

            // パラメータを設定
            var param = new Dictionary<string, object>();
            param["message"] = "テスト投稿です。";

パラメータの設定が終われば,FacebookClient.PostAsyncメソッドで送信します。

        // ステータスを共有する
        private void btnShare_Click(object sender, EventArgs e) {

            // アクセストークンを取得する
            var accessToken = GetAccessToken();
            // FacebookClientインスタンスを生成
            var client = new FacebookClient(accessToken);

            // パラメータを設定
            var param = new Dictionary<string, object>();
            param["message"] = "テスト投稿です。";

            // Facebookへステータスを投稿する
            client.PostCompleted += client_PostCompleted;
            client.PostAsync("me/feed", param);
        }

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

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

            // データを扱いやすいようにDictionary型にキャストする
            var result = e.GetResultData() as IDictionary<string, object>;
            if (result == null) return;
            // 投稿後のステータスIDを取得する
            var statusId = (string)result["id"];

            Dispatcher.BeginInvoke(() => {
                MessageBox.Show("success post status.");
            });
        }

成功のメッセージボックスが表示された後に,自分のウォールを確認するときちんと投稿できているのが確認できます。

画像

リンクを共有する

ステータスの投稿で使用した「message」以外にも,以下のようなパラメータが存在しています。OS標準の投稿APIのよりも細かな設定を行うことができます。

画像

上のスクリーンショットの通り,ステータス項目をすべて埋めて投稿するのに以下のように指定しました。

        // ステータスを共有する
        private void btnShare_Click(object sender, EventArgs e) {

            // アクセストークンを取得する
            var accessToken = GetAccessToken();
            // FacebookClientインスタンスを生成
            var client = new FacebookClient(accessToken);

            // パラメータを設定
            var param = new Dictionary<string, object>();
            // ステータス
            param["message"] = "testtest";
            // リンクのURL
            param["link"] = "http://ch3cooh.jp/";
            // リンクに関する画像のURL
            param["picture"] = "http://ch3cooh.jp/wp-content/uploads/2010/12/topimage1.png";
            // リンクのタイトル
            param["name"] = "Article Title";
            // リンクの概要
            param["caption"] = "Caption for the link";
            //  リンクの詳細
            param["description"] = "Longer description of the link";

            // Facebookへステータスを投稿する
            client.PostCompleted += client_PostCompleted;
            client.PostAsync("me/feed", param);
        }

投稿が完了すると,先ほどと同様にclient_PostCompletedメソッドが実行されます。

さいごに

今回は,Facebookに登録されている友達リストを取得し,ウォールにステータスの投稿とリンクの共有処理を実装してみました。

単にステータスを投稿するだけであったり,リンクを共有したいだけであれば,連載第33回でご紹介したShareStatusTaskやShareLinkTaskで充分な場合は多々あります。

Facebook C# SDKを利用してステータスの投稿機能を実装したほうがよいケースとしては,例えばアプリケーション内で写真をアルバムにアップロードして,そのままウォールへステータスを投稿したい場合などでしょう。アプリケーションでFacebookへの認証を行っていたとしても,OS側でFacebookの認証が済んでいない場合があります。ShareStatusTaskの実行後,更に認証処理が必要となってしまい,ユーザーに不便な思いをさせてしまいます。使いやすいアプリケーションを目指して,取捨選択して頂ければと思います。

次回も引き続き,Facebook C# SDKを利用したTipsをご紹介したいと思います。今回は以上で終わりです。ありがとうございました。

著者プロフィール

和田健司(わだけんじ)

1982年10月12日生まれ。大阪で働くプログラマ。Microsoft MVP for Device Application Development(Jul 2010 - Jun 2011)。Windows Mobileに傾倒し今に至る。Windows Mobile向けのTipsを書いています。iPhoneアプリ開発を始めました。嫌いな食べ物はカレー。

URL: http://ch3cooh.jp/
Blog: http://d.hatena.ne.jp/ch3cooh393/