2010年9月時点のYoutubeからのダウンロードについて

趣味で自分用にYoutubeダウンローダーを作ったので、調べた事を載せときます。
まー誰かがGoogle先生経由で参考にするかもしれませんし。


ダウンロード対象が10ファイル程度なら、ブラウザの拡張機能の方が楽です。

  1. Firefoxアドオン「Video DownloadHelper
  2. GreasemonkeyスクリプトYouTube HD Suite


今回いちいち見るのが面倒で100本くらいダウンロードしたので(げふげふ
自作プログラムでダウンロードしました。

【処理概要】

  1. 動画ファイルURLの特定
  2. 動画ファイルのダウンロード

動画ファイルURLの特定

動画ファイルURLの特定方法は2種類あり「品行方正なget_video_info方式」と
「泥臭いスクレイピング方式」ですが、今回はスクレイピング方式を使います。
get_video_info方式は、情報ファイルが提供されない動画があります。
※ファイルをアップロード者が選択してるっぽい


(1)スクレイピングで対象動画の各種情報を取得
http://www.youtube.com/watch?v=ypb3ofXQ9u0

使用正規表現 swfConfig = ({.+?});

取り出した文字列は、json形式のなので、そのままjsonパーサーに
入れると値の取り出しが楽です。
取り出した情報(以後、動画情報)を使用して、ダウンロード対象URLを作って行きます、


(2)動画IDの選定
http://www.youtube.com/watch?v=ypb3ofXQ9u0
上記の場合は「ypb3ofXQ9u0」の部分です。


(3)画質の選定
Youtubeは複数の画質の動画を提供しているので、一番画質の良い物を選びます。
動画情報の「fmt_list」って変数の中に、提供画質の一覧が入っているので、
リストの一番優先度が高い物を選びます。

優先順位1:fmt=38
優先順位2:fmt=37
優先順位3:fmt=22 の HD 画質の MP4 動画
優先順位4:fmt=35 の HQ/HD 画質の FLV 動画
優先順位5:fmt=18 の HQ 画質の MP4 動画
優先順位6:fmt=34 の SD/HQ 画質の FLV 動画


(4)トークンの選定
ダウンロード時には、一時的に割り当てられたトークンってのを
渡してあげないと行けません。
動画情報の「t」って変数の中に入っています。


(5)URLの構築
http://www.youtube.com/get_video?asv=2&video_id=%s&t=%s&fmt=%s
http://www.youtube.com/get_video?asv=2&video_id=動画ID&t=トークン&fmt=画質

動画ファイルのダウンロード

特に注意事項は無いので、前特定したURLからファイルをダウンロードします。