運用的要件
ZODBに巨大なMP3ファイルを置くのは嫌なのでLocalFSがPlone 2.1で動くかどうか調べてみる。
http://www.easyleading.org/Downloads/
LocalFS 1.7rcとPloneSingleLocalFS-0.0.2はPlone 2.1上でもとりあえず動く(PloneSingleLocalFSはinstall.pyの一部をコメントアウトした)。しかし,追加時とかrename時とかフォルダリスティングとかでちょっと変なことになる。リスティングがヘンになるのは,Plone 2.1ではフォルダリスティングがカタログベースに変わっているためでしょうね。このあたりは,再カタログするとか心の目を使うとか運用でカバーすればなんとかなる。
PloneSingleLocalFSは,追加した静的なファイルを自身のプロダクトフォルダのExtensions以下に置く。ファイル名はZopeインスタンスワイドで一意である必要があって重複しちゃいけないってことか。まあいいや。
サイズの大きなmp3ファイルを配信するためにZopeプロセスが占有された状態が長い間続いたらどうなるかとか考えると怖いので考えないことにする。大規模にやりたいときはとりあえずリバースプロキシするんだろうなあ。
RSS出力
RSSったって「決まり事がキツい文字列」でしかないので,特定のPloneSingleLocalFSインスタンス以下のmp3ファイルをパースして必要なメタデータを埋めて出力するとか,最悪手書きするとかすればOK。全然OK。
mp3ファイルのID3タグからメタデータを自動抽出するとかするとかっこいいかなあ。毎回MP3ファイルのヘッダをパースしてID3タグの情報を得ているといろいろ面倒そうなので,ATContentTypeベースのmp3コンテンツタイプを作ってファイルをアップデートしたときだけID3の情報を取り出してPloneインスタンスのDublinCoreに埋め込んだりするとPlone 2.1的に美しく実装できそう。そのATCTなインスタンスとBlogのエントリがreferenceで結ばれていると勝手にBlogのRSSにenclosure情報がくっついたりするとステキだ。こういう世界は他のCMSには容易にマネ出来なそうだし。
ということで,ステキな未来を妄想しつつ運用でカバーするとPlone 2.1でもPodcast出来そうな気がしてきた。
なんか考えれば考えるほど簡単そうなので合宿中にちょろっと作ってみることにしよう。せいぜいかかっても30分くらいかなあ。プログラムをPodcastするかも:-)。