SkydriveとはMicroSoft社が提供するクラウドストレージサービスです。
無料で25GBも使用できるため、たくさんのデータを保存することが可能です。
Windows Phone 7(以降WP7)ではこの便利なクラウドストレージをアプリケーションから簡単にアクセスするための仕組みが用意されています。
今回はこのSkydriveから写真などのメディアデータを取得する方法を2回に分けて紹介します。
詳細は以下から。
Skydriveを扱うためにはWindows Liveへログインする必要があります。
Windows Liveへのログイン方法はこちらを参考にしてください。
SignInButtonへの権限の追加
Skydriveへ接続するためには、Skydriveを使用するための権限を付加したSignInButtonでWindows Live認証を行う必要があります。
権限の付加は必要な権限をScopesプロパティに記述していきます。
付加できる権限はこちらを参考にしてください。
今回は写真の取得を行うため、以下の権限を使用します。
[table “234” not found /]xaml
<my:SignInButton Content="Button" Height="72" HorizontalAlignment="Left" Margin="121,129,0,0" Name="signInButton1" VerticalAlignment="Top" Width="206" RedirectUri="https://oauth.live.com/desktop" ClientId="0000000048096877" Scopes="wl.basic wl.signin wl.signin wl.skydrive wl.photos" />
認証情報の取得
Windows Live認証を行うでは認証を行いましたが認証情報の取得は行なっていませんでした。
SkyDriveを使用するためには認証情報である、LiveConnectSessionクラスのオブジェクトを取得する必要があります。
このLiveConnectSessionクラスはWindows Liveの認証情報を管理するためのクラスです。
LiveConnectSessionクラスのオブジェクトはSessionChangedイベントで取得することができます。
このSessionChangedイベントはSignInButtonクラスのイベントで、GUIのエディタでSignInButtonをダブルクリックするか、xamlで下記の5行目のように記述することで使用することができます。
xaml
<my:SignInButton Content="Button" Height="72" HorizontalAlignment="Left" Margin="121,129,0,0" Name="signInButton1" VerticalAlignment="Top" Width="206" RedirectUri="https://oauth.live.com/desktop" ClientId="0000000048096877" Scopes="wl.basic wl.signin wl.signin wl.skydrive wl.photos" SessionChanged="signInButton1_SessionChanged" />
上記のコードではSessionChangedイベントが発生した場合にsignInButton1_SessionChangedというメソッドが実行されるように設定されています。
下記はSessionChangedイベント発生時にLiveConnectSessionオブジェクトを取得するサンプルです。
アプリ名.xaml.cs
private LiveConnectSession session; private void signInButton1_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e) { // 認証情報の取得 session = e.Session; }
ルートディレクトリの取得
認証情報が取得できたところで早速ルートディレクトリの内容を出力してみましょう。
ディレクトリ情報の取得にはLiveConnectClientクラスを使用します。
LiveConnectClientクラスはWindows Live上のデータを扱うための機能を提供するクラスです。
このLiveConnectClientクラスのGetAsyncメソッドの引数にリクエスト用のアクションを渡すことで、Windows Liveに対してリクエストを送信することができます。
今回はユーザー自身のSkiDriveのファイル/フォルダへアクセスするため、/me/skydrive/filesという文字列を渡します。
また、アクセスした後のレスポンスはLiveOperationCompletedイベントとして返却されます。
下記はSkyDriveのルートディレクトリをTextBlockで表示するサンプルです。
アプリ名.xaml.cs
private void signInButton1_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e) { // 認証情報の取得 if(e.Session != null){ session = e.Session; LiveConnectClient filesClient = new LiveConnectClient(session); filesClient.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(filesClient_GetCompleted); filesClient.GetAsync("/me/skydrive/files"); } } void filesClient_GetCompleted(object sender, LiveOperationCompletedEventArgs e) { if(e.Error == null){ List<object> data = (List<object>)e.Result["data"]; foreach (IDictionary<string, object> files in data) { if (files.ContainsKey("name") && files["name"] != null) { textBlock1.Text += files["name"].ToString() + "\r\n"; } } } }
5行目では認証情報であるLiveConnectSessionクラスのオブジェクトを取得しています。
6行目では認証情報を引数に渡して、LiveConnectClientクラスのオブジェクトをインスタンス化しています。
7行目ではGetAsyncメソッドの実行が終わった時に発生するLiveOperationCompletedイベントをLiveConnectClientクラスのオブジェクトに設定しています。
8行目ではGetAsyncメソッドを実行してサーバーにアクセスしています。
15~24行目はディレクトリ名の取得を行なっています。この辺の処理は次回の実際にファイルを取得する部分で詳しく紹介します。