Facebook SDK for .NETを使い、アプリから画像をFacebookに投稿させるには:2カ月で160本作った還暦開発者が送る10のアプリ開発ノウハウ(4)(5/5 ページ)
古(いにしえ)からのVBでWindows 8.1向けのさまざまな機能のアプリを開発する手順やコツを解説していく。今回は、Facebookが提供するライブラリを使い、Facebookアカウントを認証して画像を投稿する方法を紹介する。
Facebookにアップロード画面のロジックコード
次に[ソリューション・エクスプローラー]内のFacebookInfoPage.xamlを展開して表示される、FacebookInfoPage.xaml.vbのコードを記述する。
Facebookにアップロード画面がアクティブになった時の処理(OnNavigatedToメソッド処理)
先のページから渡された画像を取得し、MainImageに表示する。
    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        myBmp = CType(e.Parameter, BitmapImage)
        MainImage.Source = myBmp
    End Sub
Facebookにアップロード画面の「facebookにアップロード」アイコンがタップされた時の処理(UploadButton_Clickメソッド処理)
このプログラムの肝となる、Facebookに画像をアップする処理だ。
    Private Async Sub UploadButton_Click(sender As Object, e As RoutedEventArgs) Handles uploadButton.Click
        uploadButton.IsEnabled = False
        If messageTextBox.Text = String.Empty Then
            Dim message As New MessageDialog("コメントを入力してください。")
            Await message.ShowAsync
            uploadButton.IsEnabled = False
            Exit Sub
        Else
            ProgressRing1.IsEnabled = True
            ProgressRing1.IsActive = True
            myFB = New FacebookClient(accessToken)
            AddHandler myFB.PostCompleted, Async Sub(mySender As Object, myArgs As FacebookApiEventArgs)
                                      If myArgs.Cancelled Then
                                    Dim cancellationError = myArgs.Error
                                     ElseIf myArgs.Error Is Nothing = False Then
                                          Dim myDialog2 As MessageDialog = New MessageDialog("アップロード失敗")
                                          Await myDialog2.ShowAsync()
                                          flag = False
                                       Else
                                          flag = True
                                       End If
                           End Sub
            ' このプログラムの肝、Facebookにコメント付き画像をアップロードする処理。
            Using myStream As IO.Stream = Await myFile.OpenStreamForReadAsync()
                Await myFB.PostTaskAsync("/me/photos", New With {.message = messageTextBox.Text, .file = New FacebookMediaStream() With {.ContentType = "image/jpeg", .FileName = FileName}.SetValue(myStream)})
            End Using
        End If
        If flag = True Then
            ProgressRing1.IsEnabled = False
            ProgressRing1.IsActive = False
            Dim message As New MessageDialog("アップロード成功")
            Await message.ShowAsync
            uploadButton.IsEnabled = True
        Else
            Dim message As New MessageDialog("アップロード失敗")
            Await message.ShowAsync
            uploadButton.IsEnabled = True
            Exit Sub
        End If
    End Sub
End Class
まず、非同期処理で行われるため、メソッドの先頭にAsyncを追加し、「facebookにアップロード」アイコンの使用を不可とする。
コメント欄に何も入力されていなかったらメッセージを表示し、処理を抜ける。
コメントが入力されていた場合は、以下の処理を行う。プログレスリングを動作させる。モジュール変数accessTokenで初期化された、新しいFacebookClientのインスタンス、myFBオブジェクトを作成する。AddHandlerステートメントでは、Facebookに投稿が完了した場合の、イベントハンドラを追加する。イベントハンドラ内では以下の処理を行う。
投稿が失敗した場合は、「アップロード失敗」のメッセージを表示し、メンバー変数flagをFalseで初期化する。それ以外はTrueで初期化する。
OpenStreamForReadAsyncメソッドでは、指定したファイルから読み取るストリームを取得し、変数myStreamで参照する。
PostTaskAsyncメソッドで、パスに "/me/photos"、パラメータに、入力したコメント、ContentTypeに"image/jpeg"、FileNameにモジュール変数のFileNameを指定して、Facebookサーバに非同期処理のPOSTリクエストを送信する。
ブール型メンバー変数flagがTrueなら、プログレスリングの動作をやめ、「アップロード成功」と表示する。「facebookにアップロード」アイコンの使用を可能にする。それ以外の場合は「アップロード失敗」と表示して、「facebookにアップロード」アイコンの使用を可能にする。
次回は、指定したフォルダー内の画像を、スライド形式で表示させる
今回は、ここまでだ。また次回の記事でお会いしよう。次回は、指定したフォルダー内の画像を、スライド形式で表示させる方法を紹介する。
関連リンク
本コンテストでは、2013年9月1日〜12月1日に新たにWindowsストアに新規公開されたアプリを募集します。入賞したアプリの製作者には、総額130万円の賞金が授与されますので、ふるってご応募ください。
著者プロフィール
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
 今でしょ! の終わりに安齋、家入らが評価したアプリとは〜「エイっと作ろう! Windowsストア アプリ選手権」授賞式レポート 今でしょ! の終わりに安齋、家入らが評価したアプリとは〜「エイっと作ろう! Windowsストア アプリ選手権」授賞式レポート
 謎のキャラ今出しょう子をマスコットに据えたコンテストを勝ち上がった10作品のプレゼン模様などをお届け。
 初のアジャイル/リモート開発体制でも成功できた秘訣とは〜「Windowsタブレット向けアプリ開発」先駆けインタビュー 初のアジャイル/リモート開発体制でも成功できた秘訣とは〜「Windowsタブレット向けアプリ開発」先駆けインタビュー
 日本料理のレシピを海外に紹介するアプリ「Ippin」。初物づくしのアプリ開発を成功させた秘訣をディレクターに聞いた。コミュニケーションツールやドキュメントに盛り込んだ数々の工夫とは、どんなものだったのだろうか。
 PC制御UIの最先端Leapアプリ開発入門(3):ProcessingやWindows 8.1アプリでLeapの空間ジェスチャを使うには PC制御UIの最先端Leapアプリ開発入門(3):ProcessingやWindows 8.1アプリでLeapの空間ジェスチャを使うには
 画面タッチやマウスなどのように“触れる”ことなく空中ジェスチャでPC操作が可能な新しいデバイスLeap Motionを使い、これまでにないアプリを開発しましょう。今回は、ゲームループやLeapのジェスチャ3種Circle、Swipe、Tap、ProcessingのLeapジェスチャアプリ、そしてMVVMパターンで指の数を検出するC#アプリについて解説します。
 Web開発者が手っ取り早くストアデビューする方法(1):Windowsストアにアプリを登録するための事前準備 Web開発者が手っ取り早くストアデビューする方法(1):Windowsストアにアプリを登録するための事前準備
 Windowsストア初心者のために(主に、HTMLやJavaScriptを扱うWeb開発者向けに)、簡単なアプリを開発してWindowsストアに手っ取り早くデビューする手順を解説します。初回は、Microsoftアカウントの取得、Windowsストアアプリ開発者登録、開発環境準備について。
 連載:Windowsストア・アプリ開発入門:第1回 Windowsストア・アプリってどんなもの? 連載:Windowsストア・アプリ開発入門:第1回 Windowsストア・アプリってどんなもの?
 ついにWindows 8.1の正式版がMSDNサブスクライバー向けに公開された。無償アップデートとなるため、今後は新しいWindows 8.1ストア・アプリが一般化するだろう。最新環境向けに新たにアプリ開発を始める人のための連載スタート。
 特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点 特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点
 Windows 8.1(Preview版)の変更点や新機能を開発者視点で紹介。Windows 8用に作られたWindowsストア・アプリにはどんな影響があるのか?
 UXClip(11):これからが本番、Windows 8アプリ開発 UXClip(11):これからが本番、Windows 8アプリ開発
 12月3日夜、Windows 8のハードウェアやアプリを開発者向けに紹介するイベントが行なわれた
 Windows 8提供開始、対応アプリ登場は期待できるか? Windows 8提供開始、対応アプリ登場は期待できるか?
 マイクロソフトはWindows 8の提供を正式に開始した。Windowsストアもスタートし、いよいよWindows 8プラットフォームが市場投入となる。


