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

第54回 作ってみようSkyDrive連携PowerPointアドイン(後篇)

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

動作の確認

ここまでで,アドインに必要な機能は,ほぼすべて実装できています。実行して動作を確認してみましょう。

  1. サインインボタンからサインインします。
  2. 新しいプレゼンテーションに,スライドを1枚追加します。
  3. 2枚目のスライドにマーカーを追加します図3⁠。

図3 2枚目のスライドへマーカーの追加

図3 2枚目のスライドへマーカーの追加

ここまでの動作は,既に確認しています。それではスライドショーを開始してみましょう。1枚目のスライド表示された時点で,2枚目にマーカーがあるため写真のダウンロードが始まります。スライドを進めて写真が表示されれば成功です図4⁠。

図4 追加された写真

図4 追加された写真

もちろん,SkyDriveに写真があることが前提になります。写真がない場合は,写真情報を取得しようとしている部分で例外が発生しています。Windows Phoneを持っている場合は,実際にSkyDriveへの自動アップロード設定を行い,写真を用意してみてください。または,コード中の「me/skydrive/camera_roll/photos」部分を「me/skydrive/photos」や,直接Folder IDを指定して,写真のある場所にアクセスするように変更してください。

図でもわかるように,写真の下にあるマーカーが見えていますので,マーカーは透明にするといいかもしれません。

サインアウト処理

少し残っている処理を書いていきましょう。サインアウトボタンをクリックしたときの処理は,SignOutメソッドで処理するようにしていました。今回利用しているLive ConnectのAPIでは,明示的なサインアウト用の操作は用意されていません。リボンのボタンの表示を変更し,LiveConnectClientオブジェクトの破棄のみ,ここでは行います。

Sub SignOut()
    Me.LiveConnectClient = Nothing
    Globals.Ribbons.MainRibbon.SignInButton.Visible = True
    Globals.Ribbons.MainRibbon.SignInButton.Enabled = True
    Globals.Ribbons.MainRibbon.SignOutMenu.Visible = False
End Sub

アクセストークンの更新

先ほどの動作の確認では,きちんと写真がダウンロードできたかと思いますが,アクセストークンを使ったリソースのアクセス(今回はSkyDriveの写真へアクセス)は,有効期限があります。プレゼン中にアクセストークンの期限が切れるかもしれません。そこで,写真をダウンロードする前にアクセストークンの更新処理を行いましょう。

アクセストークンの更新には,リフレッシュトークンを追加います。この値は,サインイン時に取得するようにしていました。前回に用意したLiveConnectSessionオブジェクトのRefreshTokenプロパティから参照します。

新しいアクセストークンの取得は,次のURLにアクセスします。

  • https://oauth.live.com/token?client_id=CLIENT_ID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN&redirect_uri=https://oauth.live.com/desktop

LiveAuthClientクラスに,次のコードを追記しましょう。GetSessionメソッドで得たLiveConnectSessionオブジェクトを渡すと,新しいLiveConnectSessionを得るメソッドです。

LiveAuthClient.vb

Function RefleshSession(session As LiveConnectSession) As LiveConnectSession
    Dim uri = New Uri(String.Format("https://oauth.live.com/token?client_id={0}&grant_type=refresh_token&refresh_token={1}&redirect_uri={2}",
                      Me.ClientId, session.RefreshToken, Me.RedirectUri))

    Dim client = New WebClient
    Dim json = client.DownloadString(uri)

    Dim o = JObject.Parse(json)

    If o("error") IsNot Nothing Then
        Return Nothing
    End If

    Dim newSession As New LiveConnectSession(
        o("access_token").ToString(),
        o("refresh_token").ToString(),
        New DateTimeOffset(Now.ToUniversalTime).AddSeconds(o("expires_in").ToObject(Of Integer)),
        o("scope").ToString.Split(" "c))

    Return newSession
End Function

AddPictureメソッド内の,LiveConnectClient.Getメソッドを呼ぶ直前にコードを追記します。

' LiveConnectClient の更新
Dim authClient = New LiveAuthClient(ThisAddIn.ClientId)
Dim newSession = authClient.RefleshSession(Me.LiveConnectClient.Session)
Me.LiveConnectClient = New LiveConnectClient(newSession)

ここでは単純に必ずアクセストークンを更新するようにしています。LiveConnectSessionオブジェクトは,期限情報も持っているためもう少し高度に処理することもできます。

おわりに

SkyDriveと連携したPowerPointアドインの開発は以上です。いかがでしたか。これまでの連載内容の一区切りということで,少しだけ実践的なアプリを作ってみました。ダウンロードに失敗したときの対応や,ユーザーが指定したフォルダーにある写真をダウンロードするようになど改善するポイントはいろいろあると思います。ここまで作ったみた方は,ぜひ改良もしてみてください。

著者プロフィール

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

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

URL:http://katamari.jp