天然パーマです。

YouTubeの"402 Payment Required"と戦うために「listpod-app-lite」

一昨年のちょうどこの季節、「YouTubeの動画をリストで保存、動画ポッドキャストを楽しめる」として、 ListPodというサービスをリリースしました。

ワディット代表取締役、オモロキ取締役兼CTOの和田裕介氏は3月23日、YouTubeで公開されている動画のマイリストを作成し、ポッドキャストとして配信するサービス「ListPod」ベータ版を公開した

YouTubeの動画をリストで保存、動画ポッドキャストを楽しめる「ListPod」:ニュース - CNET Japan

しかし、現在のところListPodはほぼ使えない状況にあります

Listpodに登録した動画をiTunesでダウンロードしようとすると、エラー「状況:中止されました(エラー = 500)」になります。なんとかしてください。

iTunesダウンロードエラー - ListPodサポート掲示板

原因はYouTubeの動画ファイルのパスを解析するシステムで、 アクセス規制をされているためです。 このシステム上はエラーがでるため500番のエラーを吐きますが、 実際にYouTubeへリクエストを送って失敗した際、YouTube側から「402 Payment Required」というエラーコードが返ってきています。

アクセス数がまぁ一般の方がYouTubeにアクセスする数と比べて、 膨大なため、このシステムを運用しているIP空間全てにおいて、 YouTubeの規制がかかっている状況です。 そのため、こちらのクライアントPCからYouTubeの動画を見ようとすると、 たいてい「キャプチャ」画面が現れ、イラストで書かれた文字をその都度入力することになっております。

規制は受けていても、キャプチャを通過したブラウザならばしばらくはYouTubeの動画が見れるということになります。 ようはその状態のCookieを保持したユーザーエージェントからのアクセスならば、 ListPodのダウンロード機能が使えるわけです。 が、さすがにそれを公のサービスにするわけにもいかず、 また、何回かのアクセス毎にキャプチャを要求されるわけで、その度にサービスが止まるということになり、 今ままでのようなパブリックな空間でのListPod相当のサービスを提供することは、 非常に困難だと言わざるをえません。

ListPodは死んだのか?

ある意味、そうかもしれないです。 この「402 Payment Required」は深刻な問題です。 しかし、希望はあります。一つのサービスに集中していたダウンロードという機能、 いやむしろListPodそのものを分散させる、つまり使いたい人の手元で動作するクライアントアプリケーションにすればいいのです。

てなわけで、前置きが長くなりましたが、 ListPodは死んだので、listpod-app-liteってのを作ってみたよ!

何ができるの?

立ち上げて、指定されたURLをブラウザ開いて、そこのフォームにYouTubeの プレイリストのURLを入れれば、それがPodcast用フィードになって、 動画がiTunesでダウンロードできたりするんだぜ! もちろん、iPhoneやiPodでみれる形式だよ!

どうやってインストールするの?

GitHubにソース置いてあるから、git pullして perl Makefile.PL, make, make install ってやればインストールされて、listpod-app-lite ってコマンドが使えるようになるよ!依存モジュールはPlackとかTMTとかだけどXML系には依存してないから適当にインストールしてね!

なんでモジュールのrecommendsにAnyEventとAnyEvent::HTTPが入ってるの?

俺のIP空間じゃあ、規制がかかってるんで、 キャプチャを突破した時点のクッキーがなくちゃいけないんだけど、 iTunesのクライアントとかじゃあそういう機能ないんで、 ちょっとトリッキーなことをしているからだよ。 Safariでキャプチャを突破(言葉が悪いけどごめんなさい)→ Safariのクッキーをlistpod-app-liteのUserAgentに読ませる→ 動画のパスをそのクッキー使って取得する→ ダウンロードもそのユーザーエージェント使わないとだけど、普通にやるとブロッキングするから -s AnyEvent して、 ノンブロッキングでダウンロード→ iTunesへ→やったー★ って真似しちゃだめだよ!

以下スクリーンショット!

listpod

listpod

listpod

listpod

listpod

listpod

listpod

というわけで、もしあればご要望受けつけております。 Enjoy!