YouTubeの動画をダウンロードするPHPスクリプト (2010/07)

Filed under PHP

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

 *********************************************************/
?>

Post a Comment

Your email is never published nor shared.