Filter::FetchEnclosure::Mplayerアップデートした(ソースコード)。Plagger+ネトラジ+Podcastの続きあたりの話の続きね。
Enclosureがasxなどのコンテナ形式でもコンテナの中のストリーム本体のURLを探すようになった。これでCustomFeedがずいぶん楽になる。
どのあたりがずいぶん楽か具体的に。これまでやってた、asxファイルの中身を抽出するとか微妙にイレギュラーな処理が必要なくなるので、F:FE::MplayerへのインプットはEnclosureさえあれば普通のFeedで良いことになる。なのでCustomFeedには気を使わなくていい。
というより、CustomFeedプラグインを用意する必要すらなくなる。基本となるRSSをなんでもRSSで用意してあげて、Filter::FindEnclosureURLするだけで、Filter::FetchEnclosure::Mplayerの入力には十分。
http://shop.frontierworks.jp/digital/web_radio/detail_083.htmlをPodcast化するのを例にあげると。
plugins: - module: Subscription::Config config: # なんでもRSSでRSS化したURL feed: http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fshop.frontierworks.jp%2Fdigital%2Fweb_radio%2Fdetail_083.html&key=body%2Fdiv%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd%2Ftable%2Ftr%2Ftd - module: Filter::FindEnclosureURL - module: Filter::FetchEnclosure::Mplayer config: dir: /path/to/enclosures type: asf # このあとでwavファイルを変換したりPublishするプラグインの設定を書く
これだと、Feed読み込む部分にYAML以外の特別なコードが全く要らない。
これまで、ネットラジオごとにCustomFeedを用意しないといけなかったのがこのやり方の一番のネックだったので、これでかなり簡単にPodcastが作れるようになるな。
まぁ、なんでもRSSつかうと、Feedのいくつかの場所に「なんでもRSS」という文字列が挿入されるのでそれが気になるなら普通にCustomFeedする必要があるな。「なんでもRSS」という文字列を除去するためだけにCustomFeed::NandemoRSSとかもありか。
このネタ、ずいぶんずるずるひっぱってるのでそろそろテスト書いてまとめあげたいところだわー。外部のプログラムとかストリーミングとかからむのでテストしにくいことこの上なさそうだが。