HOKYPOKY.BLOG

YouTubeのidからFLVのパスを取得する

実はこのブログのムービーモードは、背景にYouTubeのビデオが流れています。

こういうサイトを作るには、YouTubeにある動画のFLVパス(実際の動画ファイルへのパス)が必要になってきます。

昔ニコニコ動画と同じ方法が結構簡単にできたんでメモ。

YouTubeのIDをPHPにGETで渡すとFLVパスを返す

こんな感じのクエリを送る。

http://your.domain.com/to/PHP/path/api.php?id=CufzjUfINgA

PHPのソースはこう。

mb_internal_encoding('UTF-8');
$pattern = '/var swfArgs = (.*)"t": "(.*)", "hl"/';
$video_id = $_GET["id"];
$path = "http://www.youtube.com/watch?v=".$video_id;
$source =  file_get_contents($path);
preg_match_all($pattern, $source, $retVal);
$t = $retVal[2][0];
echo "http://www.youtube.com/get_video?video_id=".$video_id."&t=".$t;
  1. YouTubeにアクセス
  2. ソースを引っこ抜いてくる
  3. 正規表現でFLVのパスを取得するのに必要な情報をあつめる(パースする)
  4. FLVパスにしてecho

そういえば最近YouTubeが実はH.264形式でFLVを返してくれることがわかりました。

ついでにH.264形式でのパスを返してくれるソースはこちら

mb_internal_encoding('UTF-8');
$pattern = '/var swfArgs = (.*)"t": "(.*)", "hl"/';
$video_id = $_GET["id"];
$path = "http://www.youtube.com/watch?v=".$video_id;
$source =  file_get_contents($path);
preg_match_all($pattern, $source, $retVal);
$t = $retVal[2][0];
echo "http://www.youtube.com/get_video?video_id=".$video_id."&t=".$t."&fmt=18";

FLVパスの最後に&fmt=18としただけです。でもこれ、アップロードが遅くて再生がとまっちゃうのと、描画にスペックくっちゃうので却下。もうちょいアップのスピードくれたらなー。

あとこれはあまりやりすぎると、YouTubeからアクセス禁止になる。それこそニコニコ動画みたいに。

  • htakumu

    こんにちは
    PHPで、FLVファイルのパスを探すのにはとても驚きました。
    何も言わずに失礼ですが、YouTubeDownloaderというFlashを用いたソフトを、HOKYPOKYさんの、phpのソースと組み合わせて、作ってみました。こちら
    良かったら使ってみてください。
    あ、あと、HOKYPOKYさんが作ったphpですので、きちんとリンクさせていただいていております。
    勝手にすいません。
    HOKYPOKYさん。どうもありがとうございます。

  • htakumu

    こんにちは
    PHPで、FLVファイルのパスを探すのにはとても驚きました。
    何も言わずに失礼ですが、YouTubeDownloaderというFlashを用いたソフトを、HOKYPOKYさんの、phpのソースと組み合わせて、作ってみました。こちら
    良かったら使ってみてください。
    あ、あと、HOKYPOKYさんが作ったphpですので、きちんとリンクさせていただいていております。
    勝手にすいません。
    HOKYPOKYさん。どうもありがとうございます。