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;
- YouTubeにアクセス
- ソースを引っこ抜いてくる
- 正規表現でFLVのパスを取得するのに必要な情報をあつめる(パースする)
- 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
-
htakumu