クラウド アプリをサポートする新しい SkyDrive の API について

みなさん、こんにちは。Windows 開発統括部の古内です。

今日は、昨年の 12 月 7 日に Inside Windows Live Blog に投稿された 「SkyDrive APIs for Docs and Photos—now ready to cloud enable apps on Windows 8, Windows Phone and more」 の翻訳をお届けします。このたび Live Connect API が変更され、SkyDrive へのアクセスがより便利になりました。その紹介記事です。


Windows 8 や Windows Phone のクラウド アプリをサポートする、ドキュメントおよび写真用 SkyDrive API を提供開始

(この記事の、HTTP POST を使用してテキスト ファイルをアップロードする例の誤りを訂正しました。)

先日の Windows Store に関する発表に伴い、Windows、Windows Phone、およびその他のプラットフォーム上で SkyDrive を使ったアプリケーションを開発する皆様に向けた、マイクロソフトの新たな取り組みについてお伝えしたいと思っています。数か月前、Windows 8 用の Windows Live プレビュー (英語) として、Developer Preview 版の提供、Live Connect API の次期バージョン、そして最新の Live SDK のリリースが発表されました。Live Connect API における大きな変更点は、開発者の皆様からフィードバックをいただいていた SkyDrive へのアクセスです。SkyDrive に関するこの大きな変更により、SkyDrive 上のクラウド ストレージ内にあるユーザーのドキュメント、写真、ビデオに、アプリケーションから完全にアクセスできるようになり、それらをアップロードしたり共有したりすることが可能になりました。

SkyDrive は、Windows Phone および Windows 8 との統合により、ユーザーの "デバイス クラウド" として重要な役割を果たし、仕事やプライベートのさまざまな場面で PC と携帯電話の両方から簡単に使用できるようになります。また、SkyDrive は Microsoft Office や OneNote といったアプリとも連携できるので、ユーザーはどこからでもデータを整理したり、共有やコラボレーションしたりすることが可能になります。マイクロソフトでは、より多くの人と、より多くのアプリが、どのようなデバイスからでもクラウドにアクセスできるようになることが、ユーザーの皆様にとって最大のメリットになると考えています。この実現には、これまで構築してきたデバイス プラットフォームやデバイス アプリケーション以上のものが必要になります。Windows Live ID を持つすべてのユーザー (Windows 8 のユーザーを含む) は SkyDrive 上の無料クラウド ストレージを利用でき、ドキュメントや写真にアクセスするという各自のエクスペリエンスにこの SkyDrive を組み込むことができます。今回の API の変更により、このメリットをあらゆるプラットフォーム上のあらゆるアプリから活用できるようになりました。

Live Connect API および Windows Phone 用 Live SDK の新バージョンのリリースを発表できることを大変嬉しく思います。ここでは、今回利用できるようになった機能を紹介します。詳しい情報については、Live Connect デベロッパー センター (英語) でご確認ください。

SkyDrive へのアクセスに関する REST API の変更点

Live Connect REST API は、Windows Live ID に関連付けられたユーザーのコンテンツの直観的な階層モデルを提供します。この階層を図で示すと、以下のようになります。

SkyDrive ユーザー コンテンツ モデル

濃い青色のボックスは、今回のリリースで追加された新しいデータ モデルを表しています。SkyDrive に関する最初の変更点は、REST API 呼び出しを使ってユーザーの SkyDrive 全体にアクセスできるようになったことです。

以下は、あるユーザーの SkyDrive 上の全フォルダーの一覧を取得する HTTP 要求の例です。

 GET https://apis.live.net/V5.0/me/skydrive/files?access_token=ACCESS_TOKEN HTTP/1.1
 User-Agent: Fiddler
 Host: apis.live.net

上記の要求によって、以下のように SkyDrive アカウントの JSON 結果セットが返されます。

 {
 "data": [ // 1 item
 {
 "id": "folder.616444ee7a34f417.616444EE7A34F417!12045",
 "from":
 {
 "name": "Dare Obasanjo",
 "id": "616444ee7a34f417"
 },
 "name": "Wave 4 Feedback",
 "description": null,
 "parent_id": "folder.616444ee7a34f417",
 "upload_location": "https://apis.live.net/v5.0/folder.616444ee7a34f417.616444EE7A34F417!12045/files/",
 "count": 14,
 "link": "https://skydrive-df.live.com/redir.aspx?cid=616444ee7a34f417&page=view&resid=616444EE7A34F417!12045&parid=616444EE7A34F417!1967",
 "type": "album",
 "shared_with":
 {
 "access": "Everyone (public)"
 },
 "created_time": "2010-07-14T13:28:48+0000",
 "updated_time": "2011-07-18T03:40:07+0000"
 }
 ]
 }

ファイルのアップロードも同様に簡単です。アプリケーションは HTTP PUT 要求または POST 要求のいずれかを使用して、SkyDrive のアップロード先のフォルダーにドキュメント、写真、ビデオをアップロードできます。SkyDrive へのアップロードについては、すべてのファイル形式がサポートされているわけではない点に注意してください。今回のリリースでは、ユーザーが SkyDrive.com 上で簡単にプレビューできる種類のコンテンツをサポートすることが優先されています。

HTTP PUT を使用してテキスト ファイルをアップロードする例を以下に示します。

 PUT https://apis.live.net/v5.0/me/skydrive/files/HelloWorld.txt?access_token=ACCESS_TOKEN 
 Hello, World!

以下は、HTTP POST を使用して同じようにテキスト ファイルをアップロードする例です。

 POST https://apis.live.net/v5.0/me/skydrive/files?access_token=ACCESS_TOKEN 
 Content-Type: multipart/form-data; boundary=A300x
  
 --A300x
 Content-Disposition: form-data; name="file"; filename="HelloWorld.txt"
 Content-Type: application/octet-stream
  
 Hello, World!
 --A300x--
 

これらは、標準の HTTP を使用するだけで、簡単に SkyDrive と対話できることを示す一例です。ファイルの編集、コピー、共有といったその他の操作についても、同じように簡単です。Interactive SDK のサイト (英語) にアクセスして、Live Connect REST API をお試しください。

Windows Phone 用 Live SDK を使って SkyDrive と連携する

Live SDK の目的は、どのアプリケーションでも実行する必要のある一般的なタスクを Live SDK を使って簡素化することです。このような一般的なタスクとして、サインイン ボタンを作成する、OAuth 2.0 経由でデータへのアクセスについてユーザーに同意を求め、許諾を得る、Live Connect REST API と連携する、などが挙げられます。

Developer Preview 版の Windows Phone 用 Live SDK のリリース後から、開発者フォーラム (英語)では活発に意見交換が行われていました。これは私たちにとっても大変嬉しいことです。

開発者の方々が Windows Phone 用 Live SDK をスムーズに使い始められるように、Photo Sky on the Go というコード サンプルを作成しました。これには、SkyDrive で写真アルバムを閲覧する方法や、Pictures ハブやカメラから写真をアップロードする方法が含まれています。このサンプルには単純化された要素が多く含まれていますが、その 1 つにサインインと同意のプロセスを処理する標準的なサインイン コントロールが含まれています。これは、自分の Windows Phone アプリの XAML でそのまま使うことができます。下記の XAML はサインイン ボタンの作成を指定していますが、このボタンからユーザーはサインインを行い、自分のプロファイルや写真にアクセスしたり、SkyDrive にコンテンツをアップロードしたりすることができるようになります。

 <live:SignInButton ClientId="YOUR CLIENT ID GOES HERE" Scopes="wl.basic wl.photos wl.skydrive wl.offline_access 
 wl.signin wl.skydrive_update" RedirectUri="https://oauth.live.com/desktop" Branding="Skydrive" TextType="SignIn" 
 Grid.Row="1" Margin="114,8,145,8" d:LayoutOverrides="VerticalAlignment" SessionChanged="SignInButton_SessionChanged"/>

上記のコードによって、以下のようなボタンが作成されます。

サインイン ボタン

このボタンをクリックすると、OAuth 2.0 ベースの許諾フローが開始されます。ここでユーザーは、アプリケーションが自身の SkyDrive にアクセスすることを許可するか、しないかを選択できます。

アプリケーションによるアクセス

このプロセスが完了すると、アプリケーションは LiveConnectClient クラスを使って SkyDrive のコンテンツをダウンロード/アップロードできるようになります。以下は、Live SDK を使って SkyDrive 上の写真アルバムを閲覧する Photo Sky on the Go アプリのコードです。

 private void GetAlbumData()
         {
              LiveConnectClient clientFolder = new LiveConnectClient(App.Session);
              clientFolder.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(clientFolder_GetCompleted);
              clientFolder.GetAsync("/me/albums");
         }
   void clientFolder_GetCompleted(object sender, LiveOperationCompletedEventArgs e)
         {
             if (e.Error == null)
             {
                 List<object> data = (List<object>)e.Result["data"];
   foreach (IDictionary<string,object> album in data)
                 {
                     SkydriveAlbum albumItem = new SkydriveAlbum();
                     albumItem.Title = (string)album["name"];                    
                     albumItem.Description = (string)album["description"];
                     albumItem.ID = (string)album["id"]; 
                     Albums.Add(albumItem);
                     GetAlbumPicture(albumItem);
                     DownloadPictures(albumItem);
                 }
             }
         }

以下は、上記のコードによって実現するユーザー エクスペリエンスのスクリーンショットです。

SkyDrive 上の写真アルバムを閲覧する

携帯電話から写真をアップロードするコードも同様に単純明快です。

 internal void Upload()
     {
         PhotoChooserTask task = new PhotoChooserTask();
         task.ShowCamera = true;
         task.Completed += new EventHandler<PhotoResult>(task_Completed);
         task.Show();
     } 
     void task_Completed(object sender, PhotoResult e)
     {
         if (e.ChosenPhoto == null)
             return; 
         LiveConnectClient uploadClient = new LiveConnectClient(App.Session);
         uploadClient.UploadCompleted += new EventHandler<LiveOperationCompletedEventArgs>(uploadClient_UploadCompleted);
         uploadClient.UploadAsync(SelectedAlbum.ID, "Image"+DateTime.Now.Millisecond+".jpg", e.ChosenPhoto);
     } 
     void uploadClient_UploadCompleted(object sender, LiveOperationCompletedEventArgs e)
     {
         if (e.Error == null)
         {           
             Deployment.Current.Dispatcher.BeginInvoke(() => DownloadPictures(SelectedAlbum));
            
         }
     }

上記のコードでは、PhotoChooserTask を使って Pictures ハブやカメラから写真を選択し、その後 LiveConnectClient クラスを使って SkyDrive 上にアップロードしています。

SkyDrive に写真をアップロードする

このように、作業はとてもシンプルです。

以前、Mike Torres が Building Windows 8 ブログ「SkyDrive によって "Windows 8" のアプリをクラウドへと拡張する 」の中で言及していましたが、Windows 開発者向けには Windows 8 Developer Preview 用の Live SDK もあります。この SDK は Windows の今後のリリースに合わせて更新され、Windows 次期バージョンの正式リリースと同時に提供される予定です。

開発したアプリを披露してください

ユーザーおよび開発者の皆様からは、SkyDrive に対して積極的なご意見やご要望をいただき、大変感謝しています。この新しい API の提供によって、さらに画期的な方法で SkyDrive を皆様のモバイル アプリやデバイス、Web サイトに統合していただけることを期待しています。

たくさんのフィードバックをありがとうございました。フィードバックはいつでも受け付けていますので、引き続きご協力をお願いいたします。