Persist XML
Persist XMLはプラグイン固有の設定を保存するために使用します。XML文書の内容はプラグインが自由に決定でき,
Persist XMLはプラグインの全般的な設定を保存するために用意されているもので,
動画像のアップロード
アップロード処理を行うメソッドはPublishItemです。ユーザーが選択した動画像の個数の回数だけメソッドが呼ばれます。作成するプラグインでは,
- Session XMLから画像の情報を取得
(画像形式, ファイル名, タイトルなど) - 同様に PostURI・
ユーザー名・ パスワードを取得 - はてなフォトライフへ画像をアップロード
メソッドの引数と戻り値
PublishItemメソッドには以下の引数があります。
引数名 | 説明 |
---|---|
parentWindow | Liveアプリケーションのウィンドウハンドル。各アップロード処理に何かしらのウィンドウ表示が可能です。 |
mediaObjectId | Liveアプリケーションが付けた動画像のID。Session XMLの<Item>要素id属性と一致しています。 |
stream | アップロードする動画像のバイナリストリーム。 |
sessionXml | ShowConfigurationSettingsメソッド内で編集されたSession XML。 |
publishProperties | IPublishPropertiesオブジェクト。 |
callback | 進行状況の通知およびユーザーによるキャンセル検出のためのIPublishProgressCallbackというInterfaceのオブジェクト。 |
cancelEvent | ユーザーによるキャンセル検出するためのEventWaitHandleオブジェクト。 |
publishProperties,
戻り値はShowConfigurationSettingsメソッドと同じくBoolean型です。アップロードが成功した場合はTrueを返し,
メソッドの実装
まず,
- 動画・
画像の判別 - 拡張子からContent Type文字列の作成
- タイトルまたはファイル名から写真名の決定
動画が選択されていた場合は処理を終了し,
以上のコードは次のように書くことができます。
' XDocument へ変換
Dim session = XDocument.Parse(sessionXml.InnerXml)
' <Item id="mediaObjectId">要素取得
Dim item = (From e In session.<PhotoGalleryPublishSession>.<ItemSet>.<Item> _
Where e.@id = mediaObjectId).First
' <PerceivedType>要素がimageの場合は処理を抜ける
If item.<PerceivedType>.Value <> "image" Then
Return False
End If
' 拡張子から ContentType 文字列作成
Dim contentType As String
Select Case item.<OriginalFileExtension>.Value.ToLower
Case ".jpg", ".jpeg"
contentType = "image/jpeg"
Case ".gif"
contentType = "image/gif"
Case ".png"
contentType = "image/png"
Case ".bmp"
contentType = "image/bmp"
Case Else
Return False ' サポート外の拡張子
End Select
' 写真名にはタイトルまたはファイル名を使用する
Dim title As String
If item.<Title>.Value <> "" Then
title = item.<Title>.Value
Else
title = item.<OriginalFileName>.Value
End If
画像自体のデータはStreamで渡されていますので,
Try
' アップロード
Dim params = session.<PhotoGalleryPublishSession>.<PublishParameters>
PostPhoto(params.<UserName>.Value, params.<Password>.Value, params.<PostUri>.Value, title, contentType, stream)
Return True
Catch webEx As WebException
Return False
End Try