youtubeの動画URLを探すぜ

2010.04.13(火)

こんにちわ。beshinです。
うちの娘もスクスク育ってます。僕も成長しないといけないので、
Flashばかりではなく、たまには違うことやってみます。

ついこの前のyoutubeのリニューアルに伴い動画へのアクセス方法の仕様が変わりました。
前回のエントリーでインプットでyoutube使って、別の形でアウトプットさせようと企んでいた僕にとっては一大事です。
前はここのCGIをまんま使わせてもらってましたが、仕様が変わって以来うまく動いてないようです…
http://nondelion.com/archives/2009/04/08/2255

他の動画ダウンロード系のウェブサービスも見ても、軒並み停止してるぽいです。

仕方がないので、自分でやってみることにしました。

結論から言うと、今回はうまくいきませんでした。

でも、とりあえずプロセスだけ共有します。(まああんまり役に立たないですが…)

まずはじめに、動画のファイルを調べました。
昔はIEとかのテンポラリアイテムをみてやってましたが、firebug接続でダウンロードの様子を確認できるので楽チンです。
一覧からそれっぽいファイルを探します。

次に、動画へのAPIを確認しました。

http://www.youtube.com/get_video_info自体はのこっているっぽいので、動画のIDを渡してみました。

http://www.youtube.com/get_video_info?video_id=eWp7R_uoWN4
get_video_infoというファイルがダウンロードできるので中身をみます。
いろいろ解析してみると、さっきのダウンロードファイルぽいURLがありますね。

というわけで超適当にPHP買いてURLを表示させてみます。

<?php

require_once “HTTP/Request.php”;
$key = “fmt_stream_map”;
$id = $_GET["id"];
$req =& new HTTP_Request(“http://www.youtube.com/get_video_info?video_id=”.$id);
if (!PEAR::isError($req->sendRequest())) {
$elements_body = split(‘&’,$req->getResponseBody());
}
$querys = array();
foreach( $elements_body as $element ){
$arr = split(‘=’,$element);
$querys[$arr[0]] = $arr[1];
print $querys[$arr[0]].”<br>\n”;
}
$arr = split(‘\||,’,urldecode($querys[$key]));
print ‘<a href=’.$arr[1].’>’.$arr[1].’</a>’;
?>

localhostからアクセスすると、普通にダウンロードできました。

お!とか言って小躍りとかしましたね。

調子にのって、サーバーで確認しました。

失敗です。まあ当たり前っちゃ当たり前。

とりあえず、現状を把握するためにいろいろ試してみました。

firebugのURLをfirefoxで見るとセーフ。
他のブラウザで見るとアウト。(UAが違うから?)

localhostで表示したURLはどのブラウザでみてもセーフ。(リファラーが同じだから?)

サーバー経由でアクセスした場合はどれでもアウト。(リファラーが違うから?)

さてさて、とりあえずリファラーとUAあたりかな?このへんをどうにかできるテクがあればいけそうだけど、今回は断念・・・。

なんかわかったら続き書きます。