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

第49回 SkyDrive API 概要(2)──ファイルのアップロードほか

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

アプリでSkyDriveのアクセス

SkyDrive APIの2回目です。前回はLive Connectを利用してSkyDriveのフォルダーとファイル情報の取得を紹介しました。今回はフォルダーの作成やファイルのアップロードなどの操作を行ってみましょう。これらの操作は待ち望んでいた人も多いのではないでしょうか。

以前に提供されていたAPIでは参照だけでしたが,Live Connectでは,制限はあるもののアプリからSkyDriveへのファイルアップロードなどより多くのアクセスが許可され,よりWindows Liveと統合したアプリ開発ができるようになっています。

ファイルのアップロード

さっそくAPIを利用してのSkyDriveへのファイルアップロードについてみてみましょう。アップロードは,HTTPのPOSTまたはPUTメソッドで行います。

アップロードを行うには,OAuthのスコープにwl.skydrive_updateを指定して,ユーザーからの認可を得る必要があります。Live ConnectでのOAuthについてはこれまでの内容を参照してください。

POSTメソッドによるアップロード

まず,POSTメソッドによるファイルのアップロードです。以下のようなフォルダーの内容を表すURLへファイルを送信します。SkyDrive直下のフォルダーのパスの場合は,/me/skydriveでした。/filesを付けてフォルダーの内容を表します。さらにOAuthのアクセストークンを付け,次のURLへファイルをPOSTメソッドで送信するとアップロードできます。

  • https://apis.live.net/v5.0/me/skydrive/files?access_token=ACCESS_TOKEN

実際にサーバーへ送信するHTTPの通信内容は,次のようなテキストです。

POST https://apis.live.net/v5.0/me/skydrive/files?access_token=ACCESS_TOKEN HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Content-Type: multipart/form-data; boundary=---------------------------7dc3801415811aa
Connection: Keep-Alive
Host: apis.live.net
Content-Length: 202

-----------------------------7dc3801415811aa
Content-Disposition: form-data; name="upfile"; filename="sample.txt"
Content-Type: text/plain

hogehoge
-----------------------------7dc3801415811aa--

サーバーからの応答は,ファイルの作成に成功した場合,次のようなJSON形式のデータです。作成されたファイルのidと一時的なファイルダウンロード用のURLが含まれています。

{
   "id": "file.xxxxx", 
   "source": "http://storage.live.com/xxxxx/sample.txt:Binary"
}

単純なHTTP POSTメソッドによる投稿ですので,簡単ですね。各種プログラミング言語で実装してみましょう。このあとPHPでのサンプルコードを示します。

アップロード先のフォルダーの指定は,前回紹介したFolderオブジェクトのidの値を使います。URLは以下のようになります。このURLは,FolderやFileオブジェクトのupload_locationの値と同等です。

  • https://apis.live.net/v5.0/FOLDER_ID/files

ファイルが同名の場合,通常は上書きされますが,クエリーにoverwriteパラメーターを付け,値にfalseを指定してアクセスすると,同名のときエラーメッセージを返すようにできます。

例:
https://apis.live.net/v5.0/me/skydrive/files?overwrite=false&access_token=ACCESS_TOKEN

アクセストークンはURLに含めるだけでなく,次のようにHTTPのAuthorizationヘッダーとしての指定も可能です。これはアップロードに限った話ではありません。

Authorization: Bearer ACCESS_TOKEN

PUTメソッドによるアップロード

PUTメソッドを使用した場合は,⁠me/skydrive/files/sample.txt」のようにファイル名をURLに付けてアクセスします。HTTPの通信で送信するデータは次のようになります。

PUT https://apis.live.net/v5.0/me/skydrive/files/sample.txt?access_token=ACCESS_TOKEN HTTP/1.1
Host: apis.live.net
Content-Length: 8
Connection: Keep-Alive

hogehoge

サーバーからの応答は,POSTメソッドのときと同じです。

既にSkyDrive上にあるファイルをPUTメソッドで上書きする場合は,Fileオブジェクトのidを使います。idを指定したパスだけでは,GETメソッドと同じ結果になり上書きされません。次のように/contentを付けてアクセスすると,既にあるファイルを上書きします。

  • https://apis.live.net/v5.0/FILE_ID/content?access_token=ACCESS_TOKEN

以上がファイルのアップロードの基本でした。ちなみに,アップロードしたファイルの共有状態は,アップロード先のフォルダーの共有の状態を継承するようです。公開されているフォルダーにアップロードすると,そのファイルも公開されている状態になります。また,ファイルの共有状態はAPIで変更できません。

著者プロフィール

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

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

URL:http://katamari.jp

コメント

コメントの記入