使ってみよう! Windows Live SDK/API

第47回 デスクトップアプリでWindows Live統合

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

表示メッセージの更新

次は,Windows Liveサービスにアクセスする例として,今回は,Live Messengerの表示メッセージ図6を更新します。この表示メッセージについて,以前は,Live Messengerのユーザーの状態などメッセージとして表示するだけの機能しかありませんでしたが,現在は情報を共有するためのツールになっています。ユーザーの更新情報としてlive.comでもその内容を確認でき,共有したいWebサイトや写真・動画のリンクも含めることができます。

図6 表示メッセージ

図6 表示メッセージ

Activityオブジェクト

Live Connectで利用する場合,ユーザーに要求する許可(Scope)の値は,wl.shareです。REST APIでアクセスするパスは,me/shareです。投稿のみ行うことができ,HTTP POSTメソッドでActivityオブジェクトを送信します。JSON形式では次のような値です。

{
    "description": "デスクトップアプリからの利用を紹介します。", 
    "link": "http://gihyo.jp/dev/serial/01/wl-sdk/0047", 
    "message": "第47回 デスクトップアプリでWindows Live統合", 
    "name": "使ってみよう! Windows Live SDK/API", 
    "picture": "http://image.gihyo.co.jp/assets/images/ICON/2008/thumb/TH64_137_wl-sdk.png"
}

Activityオブジェクトの内容は次の通りです。

プロパティ説明
messagestringメッセージ(必須)
linkstring共有する内容のURL
descriptionstring共有する内容の説明
picturestring共有する内容のサムネイル画像のURL
namestring共有する内容のタイトル
sourcestring動画の共有の場合,動画のURL(487文字以下)

上記の内容に加えて,次の読み取り専用の値があります。投稿後のレスポンスは次のように,fromオブジェクトが含まれています。

{
  "from": {
    "name": "梓 中野",
    "id": "xxxxx"
  },
  "message": "第47回デスクトップアプリでWindows Live統合",
  "link": "http://gihyo.jp/dev/serial/01/wl-sdk/0047",
  "description": "デスクトップアプリからの利用を紹介します。",
  "picture": "http://image.gihyo.co.jp/assets/images/ICON/2008/thumb/TH64_137_wl-sdk.png",
  "name": "使ってみよう! Windows Live SDK/API",
  "source": null
}

値は次の通りです。

プロパティ説明
fromstring共有した(投稿した)ユーザーの名前
idstringユーザーのID

サンプルアプリ

さきほど作ったサンプルアプリに,表示メッセージの投稿機能をつけてみましょう。

メインウィンドウのXAMLコードに追記し,<Grid>要素の中に,次のようにテキストボックスとボタンを追加します。

<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Top" Margin="5">
    <TextBox x:Name="StatusTextBox" Width="300" />
    <Button x:Name="PostButton" Content="投稿" Width="80" Margin="10 0 0 0" />
</StackPanel>

投稿ボタンをクリックしたときの処理を,MainWindow.xaml.vbファイルに以下のコードを追記します。

Private Sub PostButton_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles PostButton.Click
    Dim message = StatusTextBox.Text

    task.Factory.StartNew(
        Function() As JObject

            ' Activity の作成
            Dim activity = New JObject
            activity("message") = message

            ' REST API 呼出し(投稿)
            Using client = New WebClient With {.Encoding = System.Text.Encoding.UTF8}
                client.Headers(HttpRequestHeader.ContentType) = "application/json"
                Dim json = client.UploadString(String.Format(LiveUriFormat, "me/share", Me.AccessToken),
                                               JsonConvert.SerializeObject(activity, Formatting.None))
                Return JObject.Parse(json)
            End Using

        End Function).ContinueWith(
        Sub(o)
            MessageBox.Show("投稿しました")
        End Sub, TaskScheduler.FromCurrentSynchronizationContext)
End Sub

編集は以上です。実行して確認してみてください。上記コードでは,Activityのテキストメッセージのみ設定しています。レスポンスデータの内容は確認していません。実際にはエラー処理などが必要になってきます。

次のようにほかの値も指定すると画像の共有なども可能です。こちらも試してみてください。

' Activity の作成
Dim activity = New JObject
activity("message") = "第47回 デスクトップアプリでWindows Live統合"
activity("link") = "http://gihyo.jp/dev/serial/01/wl-sdk/0047"
activity("description") = "デスクトップアプリからの利用を紹介します。"
activity("picture") = "http://image.gihyo.co.jp/assets/images/ICON/2008/thumb/TH64_137_wl-sdk.png"
activity("name") = "使ってみよう! Windows Live SDK/API"

live.comで表示される更新情報は図7のようになります。

図7 更新情報

図7 更新情報

おわりに

今回は以上です。いかがでしたでしょうか。デスクトップアプリからのLive Connectの利用について紹介しました。モバイルアプリも同じようにWebブラウザーコントロールを使用してアクセストークンを取得します。注釈で少しふれていますが,Live SDK Developer Previewでは,Windows PhoneとWindows 8の新しいアプリタイプのMetro styleアプリでは,サインインコントロールが用意されています。こちらの紹介もまたの機会に紹介したいと思います。

Liveサービスとの連携では,ユーザーの更新情報の投稿を紹介しました。Live Messengerとの統合は,表示メッセージの投稿だけでなく,インスタントメッセージのやりとりも可能です。Live Connect登場以前の方法とは異なり,オープンな規格であるXMPPという方法で接続します。こちらも次の機会に紹介したいと思いますのでお楽しみに。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp