YouTubeのflvファイルを落とす(新仕様対応)
データURLが仕様変更され、新仕様ではムービー取得にvideo_id以外にtパラメータが必須になり、get_videoでも一旦リダイレクトされるようになったようです。
より(もう無い)
YouTubeのコンテンツページのソースをDOM Viewerで見ると、
<embed type="application/x-shockwave-flash" src="/player2.swf?video_id=XXXXXXXXXXX&l=YYYYY&t=ZZZZZZZZZZZZZZ" id="movie_player" name="movie_player" ...>
となっています。
- ページに埋め込まれているSWF: http://www.youtube.com/player2.swf?video_id=XXXXXXXXXXX&t=ZZZZZZZZZZZZ
- 簡易SWF: http://www.youtube.com/v/XXXXXXXXXXX
- t入りのURLにリダイレクトされる
- 上記SWFで取り込んでいるflv: http://youtube.com/get_video.php?video_id=XXXXXXXXXXX&l=YYYY&t=ZZZZZZZZZZZZ
- ムービーflvの実際のURLにリダイレクトされる
で取れました。URLを作るには、以下の方法が取れるでしょう:
- watchページを解析する(JavaScript向き): document.getElementById("movie_player").src.substr("/player2.swf?".length)等
- 簡易SWFのURLを送り、リダイレクトURLを解析する(サーバプログラム向き)
一応、bookmarkletにしてみました(実際は一行で)。
javascript:void(function(){var%20div=document.createElement(%22div%22); div.innerHTML=%22<a%20href=%27http://youtube.com/get_video.php?%22+ document.getElementById(%22movie_player%22).src.substr(13) +%22%27>download%20flv</a>%22; document.body.insertBefore(div,document.body.firstChild);}())
get_videoという名前になるので、適宜拡張子flvをつけてリネームします。
flvはFFmpegやそのGUIフロントエンドになってるRiva FLV Encoderでmpg,aviなど各種形式に変換できるはず。