TwitterとFacebookへの同時投稿を行う(後編)

2013年4月3日(水)
薬師寺 国安

次にソリューションエクスプローラー内のFacebookInfoPage.xamlを展開して表示される、FacebookInfoPage.xaml.vbをダブルクリックしてリスト4のコードを記述します。

ロジックコードを記述する

リスト4 (FacebookInfoPage.xaml.vb)

Option Strict On
Imports Facebook

MessageDialogを表示するのに必要なWindows.UI.Popups名前空間をインポートします。

Imports Windows.UI.Popups

Public NotInheritable Class FacebookInfoPage
  Inherits Page

  Dim myText As String
  Dim flag As Boolean

ページがアクティブになった時の処理

FacebookLoginPage.xamlから送られた「投稿内容」を取得して、メンバ変数myTextに格納します。

モジュール内で宣言したPublic変数accessTokenで初期化された新しいFacebookClientのインスタンスを作成します。

AddHandlerメソッドでFacebookへのPOSTが完了した時に発生する、PostCompletedイベントにイベントハンドラを指定します。イベントハンドラ内では以下の処理を行います。

エラーが発生した場合には「アップロード失敗」のメッセージダイアログを表示します。
ブール型メンバ変数flagをFalseで初期化します。
それ以外はflagをTrueで初期化します。

キーと値のコレクションを表す、Dictionaryクラスのインスタンス、myParamオブジェクトを作成します。
myParamの”message”に投稿内容を格納しているメンバ変数myTextを指定します。

PostTaskAsyncメソッドで、パスに "/me/feed"、パラメーターにmyParamを指定して、Facebookサーバーに非同期処理のPOSTリクエストを送信します。

ブール型メンバ変数flagがTrueなら「TwitterとFacebookに投稿しました。」と表示します。

非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。

  Protected Overrides Async Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
    myText = CStr(e.Parameter)
    myFB = New FacebookClient(accessToken)
    AddHandlermyFB.PostCompleted, Async Sub(mySender As Object, myArgs As FacebookApiEventArgs)
                   If myArgs.Error Is Nothing = False Then
                       Dim myDialog As MessageDialog = New MessageDialog("アップロード失敗")
  
                       Await myDialog.ShowAsync()
                       flag = False
                     Else
                      flag = True
                     End If
                   End Sub
    Dim myParam As New Dictionary(Of String, Object)
    myParam("message") = myText
    Await myFB.PostTaskAsync("/me/feed", myParam)
 
    If flag = True Then
      messageTextBlock.Text = "TwitterとFacebookに投稿しました。"
    Else
      messageTextBlock.Text = "投稿失敗"
    End If
  End Sub
End Class
サンプルの解像度について

今回の応用編では、筆者の解像度1920×1080で作成したサンプルが多かったのですが、この方法は好ましい方法ではありません。

1920×1080を指定して作成すると、Windows 8のハードウエア認定を受けることのできる1366×768の解像度では画面が途切れてしまいます。

そこで筆者は下記のコードを使用して解像度を取得し、画面の表示を変更しています。

Dim myWidth = CInt(Window.Current.CoreWindow.Bounds.Width)
  Dim myHeight = CInt(Window.Current.CoreWindow.Bounds.Height)
  If myWidth = 1920 AndAlso myHeight = 1080 Then
    ~解像度が1920×1080の場合の画面の表示処理~
  ElseIf myWidth = 1366 AndAlso myHeight = 768 Then
    ~解像度が1366×768の場合の画面の表示処理
  End If

上記のコードによって解像度による画面の表示サイズの変更を行います。皆さんも一度お試しください。

今回で、応用編は終わりです。基本編と応用編合わせていろいろなサンプルを見てきましたが、いかがだったでしょうか。この連載が、皆様のWindows ストアアプリ挑戦への足がかりになっていただければ、筆者としてはうれしい限りです。是非、挑戦していただきたいと思います。どうも、ありがとうございました。

薬師寺国安

薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

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)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています