Podcast のフィードを作ろうとして見事にハマった。文字コードがいけなかったのだ。プラグインを作って強引に対応する。
これは Movable Type 2.661 で,文字コードとして EUC-JP を使っている場合の対応方法である。Movable Type 3.x 以降の対応方法はもっとスマートな方法がある。
Podcast 用に RSS 2.0 のフィードを新しく作って,iTunes に登録してみた。しかし,エラーが表示されてしまった。
[http://nlogn.ath.cx/podcast.xml]は有効な Podcast URL ではないようです。
正しい URL を入力したことを確認して、もう一度やり直してください。
URL は合っている。フィードの内容がいけないのだ。MT 3.2x 用テンプレート (RSS 2.0 Index) でもダメだし,MT 2.6x 用のテンプレート(2.6x Default Templates)でもダメだった(同じ RSS 2.0 フィードでも,3.2x 用と 2.6x 用では違うもののように見えるのは,使っている名前空間が違うからなのだろう)。
調べてみると,原因は文字コードにあった。アップル - iTunes - Podcast - 技術仕様 (オリジナル英語版)には次の記述がある。
フィードにはUTF-8エンコードを使用してください。UTF-8以外のエンコードは、iTunesでは動作保証されません。
他のコードを試した人もいて,ポッドキャスティング配信方法 では,ブログの文字コードをEUCにしているためか、iTunesではエラーになってしまいました。(中略) iTunesでは、UTF-8とShift_JISなら認識してくれるようです。
とのこと。Shift_JIS でもいけそうだが,iTunes の技術仕様通り UTF-8 がいいだろう。
環境は Movable Type 2.661。文字コードを EUC-JP から UTF-8 に変換しなければならない。プラグインがないか探してみると,mt-jfold というものがあったのだが(Milano::Monolog: プラグインを3.0対応にしました),バージョンアップされていて,MT::I18N を使うようになっていた。MT::I18N は,MT 3.0 で新しく導入されたモジュールで,MT 2.6x には存在しない。mt-jfold の旧いバージョンは公開されていない。むー。MT 3.0 以降であれば,mt-jfold のスーパーセットである MT-I18N Plugin - Ogawa::Memoranda で対応するのがスマートだろう。
仕方ないので,自前でプラグインを用意することにした。
短っ! 本質的な部分は2行しかない。
ファイル名は何でもよいので,例えば convert2utf8.pl などとして plugins ディレクトリ内に保存する。Perl モジュール Jcode.pm を利用して一発変換している。折角なので,xml 宣言の部分も変換する。Perl のコードとしては,「?」を「\?」としてエスケープしておくのがポイントである。
Podcast 必要なプラグイン Brandon Fuller | MT-Enclosures: A Movable Type Plugin をインストールしておく。
RSS 2.0 に関しては,MT 2.661 でも MT 3.2x 用のテンプレートが使える。3.2x Default Templates から RSS 2.0 Index をコピーしてきて,新しくインデックスを作る。
赤色で示した部分をテンプレートのコードに追加する。「...」は省略を表す。
最初の <MTConvert2UTF8> の直後に改行や空白文字を入れてはならない。xml 宣言はドキュメントの最初になければならないからである。
再構築後,iTunes への登録に成功すれば完成である。
上で作ったフィードには,iTunes が独自に用意しているタグを使っていない。使わなくても iTunes で再生は可能である。iTunes タグを追加するのはまた後日ということで。
Posted by n at 2006-08-25 01:24 | Edit | Comments (0) | Trackback(0)
Master Archive Index
Total Entry Count: 1957