印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType MT 2.661 で Podcast

iTunes に対応した Podcast 用 RSS フィードのテンプレートを書いた。Movable Type 2.661 だとすんなり行かない。って言うかまだ 2.661 かよというツッコミはなしの方向で。

■ ■ ■

Mobable Type で Podcast する場合,基本は RSS 2.0 のテンプレートを使い,MT-Enclosures プラグインを入れて MTEntryEnclosures タグを追加するだけでよい(Brandon Fuller | MT-Enclosures: A Movable Type Plugin)。

最新版の Movable Type 3.3 で,かつ文字コードに UTF8 を使っていれば全く問題はないのだが,このサイトは MT 2.661 + 日本語化パッチで,しかも文字コードが EUC なので問題あり。工夫が必要である。欲を出して iTunes に登録したときに,きちんと表示されるようにした。

こうして,ますます 2.661 から離れられなくなっていくのであった。どうしよう…。

気を取り直して話を進めることにする。このサイトで公開している RSS 2.0 のフィードに付け加えることも考えたが,Podcast では古い記事も含めて全部表示させたいので,新しくフィードを作ることにした。当然,再構築するテンプレートを増やした分だけサーバの負荷は上がることになるが,仕方ない。

以下がこのサイトで使っている Podcast 用のフィードである。

<MTConvert2UTF8><?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<rss version="2.0"
   xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
   xmlns:dc="http://purl.org/dc/elements/1.1/">

   <channel>
      <title><$MTBlogName remove_html="1" encode_xml="1"$></title>
      <link><$MTBlogURL$></link>
      <description><$MTBlogDescription remove_html="1" encode_xml="1"$></description>
      <language><$MTDefaultLanguage$></language>
      <copyright>Copyright <$MTDate format="%Y"$> <$MTBlogName remove_html="1" encode_xml="1"$></copyright>
      <lastBuildDate><MTEntries lastn="1"><$MTEntryDate format="%a, %e %b %Y %H:%M:%S"$> +0900</MTEntries></lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=<$MTVersion$></generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <itunes:owner>
         <itunes:name><$MTBlogName remove_html="1" encode_xml="1"$></itunes:name>
         <itunes:email>n@nlogn.ath.cx</itunes:email>
      </itunes:owner>
      <itunes:author><MTEntries lastn="1"><$MTEntryAuthor$></MTEntries></itunes:author>
      <itunes:explicit>no</itunes:explicit>
      <itunes:image href="<$MTBlogURL$>images/itunes-nlog.jpg" />
      <itunes:category text="Music" />

      <MTEntries category="iPlay" lastn="0">
      <item>
         <title><$MTEntryTitle remove_html="1" encode_xml="1"$></title>
         <description><$MTEntryBody encode_xml="1"$></description>
         <link><$MTEntryPermalink encode_xml="1"$></link>
         <guid><$MTEntryPermalink encode_xml="1"$></guid>
         <category><$MTEntryCategory remove_html="1" encode_xml="1"$></category>
         <pubDate><$MTEntryDate format="%a, %e %b %Y %H:%M:%S"$> +0900</pubDate>
         <itunes:author><$MTEntryAuthor$></itunes:author>
         <itunes:keywords><$MTEntryKeywords$></itunes:keywords>
         <dc:creator><$MTEntryAuthor$></dc:creator>
         <$MTEntryEnclosures  mime_include="audio"$>
      </item>
      </MTEntries>
   </channel>
</rss></MTConvert2UTF8>

テンプレート全体を MTConvert2UTF8 で囲んでいるのは,このブログの文字コードが EUC のためだ。iTunes は EUC を解釈しないので,プラグインで対応している(nlog(n): Podcast は UTF-8 で)。

フィードの中で itunes: と dc: で始まるタグを使うので,rss 開始タグには itunes と dc の名前空間を宣言している。

itunes で始まるタグは,アップル - iTunes - Podcast - 技術仕様 を見ながら書いていく。

langage タグ内では,MT 3.3 なら <$MTBlogLanguage ietf="1"$> とするが,MT 2.661 にはこのタグがないため,<$MTDefaultLanguage$> で代用している。もし,<$MTDefaultLanguage$> が何も出力しない場合は,タグを諦めて直接「ja」と書く。

日付の設定を行うのは,lastBuildDate と pubDate タグ内である。MT 3.3 なら <$MTEntryDate format_name="rfc822"$> とするが,MT 2.661 は format_name を解釈せず,属性を書かなかった場合と同じ出力になってしまうので,手書きしている。タイムゾーンは「+0900」というようにタグを使わずに書いている。<$MTBlogTimezone$> の出力は「+09:00」なのだ。残念。日付の「日」は「%e」で指定しているが,実は困ったことがある。「%e」では,日が1桁の場合「空白+数字」になってしまうため,「曜日+,+空白+空白+数字」になってしまうのだ。しかし,RFC822 では,空白が2つ連続してはならないことになっている。この書式で空白を1つにすることはできないのだ。これまた残念。ただし,iTunes は許してくれているようだ。

itunes:explicit には,露骨な表現をしていなければ「no」を指定する。露骨なら「yes」で。

itunes:image には Podcast 用の画像を指定する。300×300ピクセル以上の正方形の.jpg画像をお勧めします とのことだ(アップル - iTunes - Podcast - 技術仕様)。

itunes:category には,適切なカテゴリを指定する。このサイトの場合は「Music」である。

MTEntries タグでは,Podcast のための記事があるカテゴリと,記事の最大個数を指定している。lastn="0" と指定すると,上限なし,つまりあるだけ全部になる(小粋空間: Movable Type で全エントリーを表示する方法)。

itunes:author と dc:creator タグで2重に作者名を指定している。iTunes Podcast の技術仕様には記述がないが,FAQ/iTunesのポッドキャスト・ディレクトリに番組を登録した場合に、番組の画像や作者名を表示するのはどうすればいいの?:Podcasting Juice に次のように説明されているからである。

作者名|最新のitem要素のdc:creatorタグ内の情報

<$MTEntryEnclosures$> タグには mime_include="audio" 属性をつけておく。この属性がないと,記事の中に画像が含まれていたときに,その画像も enclosure に変換されてしまうからである。mime_include="audio" 属性を指定することにより,enclosure にするのは音声に限定することができる。

これがどのくらい信頼性のある情報なのか分からないのだが,まあいいか。

テンプレートができあがったら,Main Index テンプレートの header 内にフィード情報を追加する。

<link rel="alternate" type="application/rss+xml" title="Podcast" href="<$MTBlogURL$>podcast.xml" />

以上でフィードについては終了である。

ここからは iTunes についての話題。Podcast 用フィードへのリンクとしては,一般的には

http://nlogn.ath.cx/podcast.xml

でよい。しかし,これを iTunes にそのまま登録すると,iTunes で「→」リンクをクリックしたときに Internet Explorer が開いてしまう。

iTunes の Music Store へのリンク


ここで言う「→」リンクとは,iTunes で Podcast のサイトを選択したときに「Podcast」欄の右端に表示される矢印を指す。この「→」をクリックしたときに iTMS Podcast Directory が表示されるようにするには,iTMS の ID を指定する必要がある(Going My Way: iTMSへのリンクURLをitunes.com以下にして少し短くする方法)。

http://www.itunes.com/podcast?id=187505997

難しいのは,RSS フィードは iTunes にドラッグで登録きるが,iTMS へのリンクはドラッグではダメで,クリックしなければならないということである。

何はともあれこれで完了である。

iTunesでポッドキャストを公開する方法 | Weekly Internet Topics | デジパ株式会社 にも,Movable Type 用のテンプレートの例があるが,若干不正確。item タグ内は MTEntries タグで囲まれているから問題ないが,それより手前で MTEntryDate や MTEntryAuthor を使う場合は <MTEntries lastn="1">... </MTEntries> で囲む必要がある。

Podcast について調べていると,Atom 1.0 でもポッドキャスティングが可能なことを知った(IBM Atom 1.0 Syndication Formatの概要 : XML : dW - Japan)。エンクロージャをサポートしている。しかし残念ながら iTunes は Atom 1.0 に対応していない。

Movable Type 3.2 以降であれば,CustomFields プラグインを使って(Six Apart ProNet - Plugin Directory - CustomFields),フィールドを追加できるため,MT タグを「流用」するのではなく,ちゃんと指定することができるようになるようだ(s e v i t z d o t c o m | How to: Podcast with iTunes and Movable Type)。

Posted by n at 2006-11-30 00:32 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?