YouTubeの動画のダウンロードスクリプトです(2010年7月時点)。
以前作ったものが機能しなくなったので、作り直しました。
動画までのURLとカテゴリ周りのHTMLが変更されていたので、それにあわせて修正。
HTML内に複数サイズの動画のアドレスがあるので、全部取ってきて全部ダウンロードしてます。
ついでに動画のタイトルやカテゴリーも取ってきてます。
<?php
// 動画のURL
$url = "http://www.youtube.com/watch?v=BZqVL8ryhJQ";
// HTMLファイルの取得
$html = file_get_contents($url);
// 正規表現でURLの取得
preg_match("/\"fmt_url_map\": \"([^\"]*)\",/i", $html, $matches);
$len = count($matches);
if($len != 0) {
// HTMLからタイトルとカテゴリーを獲得する
$title = GetTitleFromHTML($html);
$category = GetCategoryFromHTML($html);
echo "タイトル :".$title."\n";
echo "カテゴリー:".$category."\n";
// 動画の取得
echo "\nURL\n";
$urls = split(",", $matches[1]);
$count=1;
foreach($urls as $url) {
$tmp = split("\|", $url);
$flv_url = $tmp[1];
$flv_url = str_replace("\\","", $flv_url);
echo $flv_url."\n";
$flv = @file_get_contents($flv_url);
$fp = fopen("video".$count.".flv", "w");
$count++;
fwrite($fp, $flv);
fclose($fp);
}
}
else echo "この動画は存在しません。\n";
// HTMLから動画のタイトルを獲得してくる関数
function GetTitleFromHTML($html) {
preg_match("/<meta name=\"title\" content=\"([^\"]*)\">/s", $html, $matches);
$title = $matches[1];
return $title;
}
// HTMLから動画のカテゴリーを獲得してくる関数
function GetCategoryFromHTML($html) {
preg_match("/<p id=\"eow-category\">(\s*)<a href=\"\/([^\"]*)\">([^<]*)<\/a><\/p>/s", $html, $matches);
$category = $matches[3];
return $category;
}
// 出力結果
/*********************************************************
タイトル :借りぐらしのアリエッティ 予告
カテゴリー:映画とアニメ
URL
http://v24.lscache4.c.youtube.com/videoplayback?ip=163.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass&fexp=900037%2C905602&itag=37&ipbits=8&sver=3&ratebypass=yes&expire=1280167200&key=yt1&signature=61948F4C9427FAF541E9C1F52F4D604E695F16E0.A414EE2A7CC3643F9134B9221F4F50164C17985C&id=059a952fcaf28494
http://v10.lscache5.c.youtube.com/videoplayback?ip=163.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass&fexp=900037%2C905602&itag=22&ipbits=8&sver=3&ratebypass=yes&expire=1280167200&key=yt1&signature=80F6D3153CDA0136A5B40B9A1AB812C1EE00ACA5.3A81F753FEC86CD3079F145975A9DAD592E0FA55&id=059a952fcaf28494
http://v3.lscache4.c.youtube.com/videoplayback?ip=163.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=900037%2C905602&algorithm=throttle-factor&itag=35&ipbits=8&burst=40&sver=3&expire=1280167200&key=yt1&signature=21075073C6B89359E36B226097A1183C3ED877D7.81C54328268A650CCC923BEE0BCE0F440711B305&factor=1.25&id=059a952fcaf28494
http://v24.lscache3.c.youtube.com/videoplayback?ip=163.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=900037%2C905602&algorithm=throttle-factor&itag=34&ipbits=8&burst=40&sver=3&expire=1280167200&key=yt1&signature=AB6D2151C93993339F9BF0E0B9002B5104FA89FA.6E9B5589FE2A2564E188A14072CFBE5D24AF50BB&factor=1.25&id=059a952fcaf28494
http://v11.lscache1.c.youtube.com/videoplayback?ip=163.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=900037%2C905602&algorithm=throttle-factor&itag=5&ipbits=8&burst=40&sver=3&expire=1280167200&key=yt1&signature=5D1275245C3BD90302DF60B99FC0D122EDCDF38C.24F3BCF2267C9B57ACE40C6636D42975912DB0EE&factor=1.25&id=059a952fcaf28494
*********************************************************/
?>