本記事の対象APIは既にサポートされていません。記事は参考程度にご利用ください。
アルバムとフォトの編集
前回はWindows Live Photo APIを利用した簡単なWebアプリケーションを作成しました。そのアプリケーションでは以下の読み取りに関する内容を実装しました。
- アルバム・フォト・フォトタイプの一覧取得
- フォトバイナリデータ取得
今回は,作成や編集など,以下の操作ができるようアプリケーションを拡張します。
- アルバムの作成
- フォトのアップロード
- アルバム・フォトの名前(タイトル)変更
- アルバム・フォトの削除
作成するWebアプリケーションを図1に示します。
あまり良いUIではありませんが,APIの確認には十分でしょう。前回に作成したものに機能を追加する形で紹介します。
リクエストとレスポンス
アルバムおよびフォト情報の取得やフォトのダウンロード時には,すべてHTTP GETメソッドを使用していました。対して,アルバム作成やアップロード,名前変更,削除ではリクエスト時にPOST,PUT,DELETEといったメソッドを使います。
最初に今回のコードで共通で利用するメソッドを作成しておきます。Default.aspx.vbファイルに追記してください。アクセスするURLとHTTPメソッドを指定するとHttpWebRequestオブジェクトを返すメソッドをまず用意します。
Protected Function CreatedRequest(ByVal path As String, Optional ByVal method As String = "GET") As HttpWebRequest
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(path), HttpWebRequest)
request.Method = method
request.Headers(HttpRequestHeader.Authorization) = String.Format("DelegatedToken dt=""{0}""", Me.DelegateionToken)
Return request
End Function
Live委任認証用のヘッダもここで追加しています。
続いてLiveサービスからのレスポンスを取得する部分もメソッドとして作成しておきましょう。
前回はXML文書やバイナリデータを取得して何かしらの処理をしていましたが,今回は基本的にHTTPステータスコードのみ,または それに加えてレスポンスに含まれるヘッダ内容のみを必要とします。
ここではレスポンス取得するメソッドを次のように作成しました。
Protected Function GetResponse(ByVal request As HttpWebRequest) As HttpStatusCode
Try
Using response As HttpWebResponse = DirectCast(request.GetResponse, HttpWebResponse)
Return response.StatusCode
End Using
Catch webEx As WebException
Return DirectCast(webEx.Response, HttpWebResponse).StatusCode
End Try
End Function
HttpWebRequestオブジェクトを引数として渡し,HttpStatusCodeが返ります。
アルバム作成およびフォトのアップロードに成功した場合,アップロードにより作成されたリソースのパスを示す文字列がレスポンスのLocationヘッダに格納されています。これから作成するアプリケーションではLocationで指定された値を使用していないのですが,メソッドは次のように作り呼び出しています。
Protected Function GetResponse(ByVal request As HttpWebRequest, ByRef location As String) As HttpStatusCode
Try
location = ""
Using response As HttpWebResponse = DirectCast(request.GetResponse, HttpWebResponse)
location = response.Headers(HttpResponseHeader.Location)
Return response.StatusCode
End Using
Catch webEx As WebException
Return DirectCast(webEx.Response, HttpWebResponse).StatusCode
End Try
End Function
参照渡しによりLocationヘッダの値を返すようにしています。

