はじめに
前回は、はてなフォトライフに画像がアップロードできるところまでを作りました。今回は作成済みのプラグインのコード変更は行いませんが、紹介しきれなかった機能についてとプラグインの配布についてです。22回、23回も併せて参照してください。
メタデータの参照
アップロードする動画像の情報は、Session XMLというXmlDocumentオブジェクトによって取得していました。Photo Gallery Publishing Plug-in PlatformではSession XMLに含まれていない動画像のメタデータを参照する方法も提供しています。これによりカメラの機種名やF値などの値が参照できます。ただし、メタデータを必ず参照できるわけではありません。
メタデータの参照は、IPublishPropertiesとIPublishItemPropertyStoreというインターフェースを通して行います。IPublishPropertiesインターフェースのオブジェクトは次のメソッドの引数として渡されています。
- ShowConfigurationSettings: 設定ウィンドウの表示
- PublishItem: 動画像のアップロード
引数名はpublishPropertiesです。これを使用してメタデータを参照してみましょう。たとえばカメラの機種名を参照するには次のように記述します。PublishItemメソッド内に以下のように記述します。
参照に必要な情報は、参照する動画像のIDと参照する値の型と参照する値のプロパティ名の3個です。
IDは、Session XMLの<Item>要素id属性値、またはPublishItemメソッドの引数mediaObjectIdからわかります。参照したい動画像のIDをGetItemPropertiesメソッドの引数に指定します。
値の型とプロパティ名は、GetItemPropertiesメソッドの戻り値のインターフェースオブジェクトIPublishItemPropertyStoreのGetValueメソッドに指定します。機種名の場合は「String」と「System.Photo.CameraModel」になります。
このほかのプロパティ名の値はMSDNライブラリの次のページで確認できます。
進行状況の通知、キャンセル処理
動画像のアップロード時に、アップロードの進行状況をLiveアプリケーションに通知することができます。またユーザーがアップロード処理のキャンセルした場合、アプリケーションから通知を受け取ることも可能です。いずれもIPublishProgressCallbackというインターフェースを通して行います。このインターフェースのオブジェクトは動画像アップロード処理を行うPublishItemメソッドの引数(引数名callback)として受け取ります。
アップロード進行状況の通知
図1のようにLiveアプリケーションではアップロードの進行を示すウィンドウが用意されています。
アップロードの進行状況をLiveアプリケーションに通知するにはIPublishProgressCallback.SetPublishProgressメソッドを使用します。PublishItemメソッド内で次のように記述します。
SetPublishProgressメソッドの引数は、進行を表す0~100のパーセントで指定します。パーセントはひとつの動画像に対して0~100を指定します。
キャンセル通知の参照
ユーザーがアップロード処理をキャンセルした場合、IPublishProgressCallback.Canceledメソッドにより知ることができます。Canceledの戻り値はBoolean型です。
キャンセル通知を受け取るには、PublishItemメソッドの引数にある EventWaitHandle型のcancelEventを使用することもできます。
プラグインの配布
プラグインを配置する場合、前回の記事にあるようにレジストリへの登録が必要です。そのため、通常はインストーラーを作成してプラグインを配布する必要があります。ここではVisual Studio 2008を使用したインストーラーの作成を簡単に紹介します。無償のVisual Basic Express Edition等では作成できませんが、後で紹介しているサンプルプログラムでは無償のインストーラーを使用しているのでそちらも参考にしてください。
セットアップ プロジェクトの作成
プラグインのソリューションへ新しいプロジェクトを追加します。図2のようにセットアップ
プロジェクトを追加します。
インストール先の設定
プラグインファイル(*.dll)のインストール先を設定します。ソリューションエクスプローラからプロジェクト名を右クリックし、「表示」→「ファイル システム」を選択します。すると、ファイル システムページが表示されるので、図3のようにアプリケーションフォルダにプロジェクト出力を追加します。
メニューの「プロジェクト出力」をクリックし、開いたウィンドウではプラグインのプロジェクトの「プライマリ出力」を選びます。
ソリューションエクスプローラを見ると、セットアップ プロジェクトにプライマリ出力が追加されたことがわかります。「Microsoft.WindowsLive.PublishPlugins.dll」は図4のようにインストールするファイルから除外しておきます。
レジストリの設定
続いてレジストリの設定を行います。ソリューションエクスプローラからプロジェクト名を右クリックし、「表示」→「レジストリ」を選択します。レジストリページが表示されるので、図5のようにキーと各値の設定を行います。レジストリキーと値の内容については前回の通りです。値の変更はプロパティウィンドウから行います。
プラグインファイルのインストール先は、環境によって変わるため[TARGETDIR]というプロパティを使用して表します。
インストーラーの実行
以上でインストーラーは完成です。ソリューションエクスプローラのセットアップ プロジェクト名を右クリックして「ビルド」後に「インストール」してみましょう。図6のようなウィザードが表示されたでしょうか。
インストール後、実際にLiveフォト ギャラリーのアップロードメニューからプラグインが動作するか確認してみましょう。最低限の設定しかしていませんので、実際には各種プロパティを適切に変更してウィザードに表示されるテキストやインストール先をカスタマイズして使用してください。
サンプルプログラム
最後に、開発に役立つアップロード プラグインのサンプルを紹介します。
Flickr プラグイン
Live フォト ギャラリーは標準でFlickrへのアップロードができますが、それとは別にC#のサンプルコードが提供されています。バイナリファイルとソースコードはダウンロードセンターからダウンロード可能です。
このサンプルでは、インストーラーをマイクロソフトのオープンソースプロジェクトのWindows Installer XML(WiX)を使用して作成していることが特徴です。サンプルを動作させるにはWiX Toolset version 3.0をインストールしている必要があります。サンプルについてはWindows Live Photo Gallery Publishing Plug-in Sampleも参照してください。
Facebook、YouTube プラグイン
サンプルというわけではありませんが、マイクロソフトのインターン生が開発したFacebookとYouTube用のプラグインが、オープンソースのホスティングサイトCodePlex上に公開されています。ソースコードが参照でき、こちらもたいへん参考になると思います。
いずれもコードはC#です。また、インストーラーにはWiXを使用しています。ソースコードは、CodePlexのページ上の「Source Code」からダウンロード可能です。
おわりに
3回に渡ってLive Photo Gallery Publishing Plug-in Platformを利用したLive フォト ギャラリーのプラグイン作成について紹介しました。いかがでしたでしょうか。日本語サービス向けのアップロード
プラグインは今のところ皆無ですので、ぜひプラグインを作成して公開してみてください。最後に紹介したプラグインの他にも、開発チームのブログにサードパーティー製のプラグインが紹介されています。併せて参考にすると良いかと思います。