Matrixsynth VideoFeed

シンセサイザー愛好家向けのブログサイトに Matrixsynth というのがある。とても活発に活動しているサイトで,一日に20件以上のエントリーがポストされる。個人的に,購読するのがちょっと大変なサイトのひとつ。

まあ,単に写真を貼っつけてるだけのエントリーとかも多くて,そういうのは目を通すのに苦労しない。ただ, YouTube のビデオなんかは,全部を真面目に見ていたらきりが無い感じがする。

できれば,これらのビデオを iPod に入れておいて,移動中とか寝る前とか,ヒマなときにチラっと見れるようにしておきたいのだけれど……。

放っておいたところで,誰かが作ってくれるわけもない。 Google App Engine を使って構築してみることにした。

それで出来たのがこれ――Matrixsynth VideoFeed

仕組みは簡単。少し前に話題になっていた「"&fmt=18" を付けるだけで YouTube が高画質に!」の応用のようなものになっている。件のオプションを利用することで H.264 MP4 形式のビデオを取得することができるのだけれど,このビデオはそのまま iPod で再生することができる。だから,これを Podcast として流し込むようなフィードを生成すればいいというわけ。

ただ,どうも iTunes のビデオ Podcast は「拡張子 mp4 のファイルへのリンクに見えるような URL」でないとビデオとして認識してくれないような仕様になっているらしく, YouTube へ直接リンクしてもダウンロードしてくれない。これを解決するために App Engine の方で一旦フックを行うようにしている。

例えば,ターゲットが

http://www.youtube.com/watch?v=_cpd_lHjFDk

であれば

http://kzr.appspot.com/v/_cpd_lHjFDk.mp4

のようにする。ここから YouTube へリダイレクトする処理は次のような簡単なスクリプトで実現されている。

http://code.google.com/p/kzr-testbed/source/browse/trunk/app/v/redirect.py

あと工夫が必要だった点と言えば……フィード解析モジュールの Universal Feed Parser が,フィードをサニタイズする際に YouTube プレイヤー部分の object エレメントを削除してしまうという問題があった。これは強引に Feed Parser を改造しサニタイズ処理を緩和することによって回避した。