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

第23回 Windows Live フォト ギャラリー ── はてなフォトライフ プラグインの作成 Part II

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

メソッドの実装

ShowConfigurationSettingsメソッドに処理を追記します。

引数のpersistXmlについてですが,これを使用してプラグインの設定を保存します。ここではユーザー名を保存するため次の書式で使用することにします。

<UserName>[ユーザー名]</UserName>

初めてプラグインが実行されたとき,persistXmlは何も記述されていないXML文書になっています。

PostURIを取得するところまで書いてみましょう。コードは次のように書くことができます。

' XDocument へ変換
Dim persist As XDocument
Try
    If persistXml.InnerXml <> "" Then
        persist = XDocument.Parse(persistXml.InnerXml)
    Else
        persist = New XDocument
    End If
Catch xmlEx As Xml.XmlException
    persist = New XDocument
End Try

Dim userName As String
Dim password As String

' ConfigureForm 表示
Dim result As DialogResult
Using frm = New ConfigureForm(persist.<UserName>.Value) ' <UserName>要素を指定
    result = frm.ShowDialog(parentWindow)
    If result = Windows.Forms.DialogResult.OK Then
        ' 投稿ボタンをクリックした場合
        userName = frm.UserName
        password = frm.Password
    Else
        ' キャンセルボタンをクリックした場合
        Return False
    End If
End Using

' PostURI 取得
Dim title As String = Nothing
Dim postUri As String
Try
    postUri = GetPostUri(userName, password, title)
Catch webEx As WebException
    MessageBox.Show(webEx.Message, "Error")
    Return False
End Try

次は,この後の処理で使用するために取得したPostURI・ユーザー名・パスワードをsessionXmlへ追記します。次の書式になるよう要素を追加します。

<PhotoGalleryPublishSession>
  <PublishParameters>
    <PostUri>[PostURI]</PostUri>
    <UserName>[ユーザー名]</UserName>
    <Password>[パスワード]</Password>
  </PublishParameters>
</PhotoGalleryPublishSession>

コードは次のようになります。コードの最後では,persistXmlへユーザー名を,sessionXmlへセッション情報を反映させています。

' Session XML にユーザー情報とPostURI 保存
Dim session = XDocument.Parse(sessionXml.InnerXml)
With session.<PhotoGalleryPublishSession>.<PublishParameters>.First
    .Add(<PostUri><%= postUri %></PostUri>)
    .Add(<UserName><%= userName %></UserName>)
    .Add(<Password><%= password %></Password>)
End With

' XmlDocument へ反映
persistXml.LoadXml(<UserName><%= userName %></UserName>.ToString)
sessionXml.LoadXml(session.ToString)
Return True

上記のコードでは引数のXmlDocumentオブジェクトからXDocumentオブジェクトへ変換してVisual BasicのXMLリテラルを使用してXMLの操作をしています。編集内容を反映させるため最後にXmlDocumentオブジェクトへ戻しています。

Session XMLとPersist XML

既に設定ウィンドウ表示処理に出てきたようにLiveアプリケーションとプラグインとのやり取りにはXLM文書(XmlDocumentオブジェクト)が利用されています。ここでは各メソッドの引数にあるpersistXmlとsessionXmlについて説明します。

Session XML

Session XMLはユーザーが選択した動画像の情報を参照するためと,アップロード処理にプラグインが必要な情報を一時的に保持するために使用します。プラグインが使用する情報の保持はSession XMLを使用せず,プラグインクラスのプロパティやPrivate変数として値を保持したほうがスマートのように思えますが,Photo Gallery Publishing Plug-in Platformによる投稿プラグインではプラグインのメソッド呼び出し時に同じインスタンスが使用されるとは限りません。そのため,必要な情報は一度Session XMLを通してLiveアプリケーションに渡し,再度Liveアプリケーションから受け取る必要があります。

Session XMLの例を以下に示します。

<PhotoGalleryPublishSession versionMajor="1" versionMinor="0">
  <PublishParameters>
    <MaxWidth>1024</MaxWidth>
    <MaxHeight>1024</MaxHeight>
  </PublishParameters>
  <ItemSet>
    <Item id="19">
      <FullFilePath>C:\Users\UserName\Pictures\background.jpg</FullFilePath>
      <OriginalFileName>background.jpg</OriginalFileName>
      <OriginalFileExtension>.jpg</OriginalFileExtension>
      <PerceivedType>image</PerceivedType>
      <Title></Title>
      <OriginalWidth>2560</OriginalWidth>
      <OriginalHeight>1920</OriginalHeight>
      <LengthMS>0</LengthMS>
      <FileSize>1620000</FileSize>
      <KeywordSet>
        <Keyword>meatball</Keyword>
        <Keyword>double tooth</Keyword>
      </KeywordSet>
      <PeopleRegionSet>
        <PersonRegion left="0.6" top="0.1" width="0.1" height="0.2">M.K</PersonRegion>
      </PeopleRegionSet>
    </Item>
    <Item id="20">
      ...
    </Item>
    <Item id="21">
      ...
    </Item>
  </ItemSet>
</PhotoGalleryPublishSession>

<ItemSet>要素内に選択された動画像の数だけ<Item>要素があり,各動画像の情報が記載されていることがわかります。動画と画像の判別は<Item>要素内にある<PerceivedType>要素の値(imageまたはvideo)により可能です。また,<Item>要素内には<Keyword>要素と<PersonRegion>要素があり,Live フォト ギャラリーでユーザーが付けたタグおよび人物タグの情報の取得も可能となっています。

プラグインが使用するセッション中の情報は,ユーザーや動画像に関するパラメータは<PublishParameters>要素以下に要素を追加し,成功・失敗などのログはXML文書の最後に要素を追加して利用することが想定されているようです。

著者プロフィール

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

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

URL:http://katamari.jp