ニコニコ動画やYouTubeのFLV動画を取得する。
ニコニコ動画がYouTubeからアクセス禁止を受けて一時閉鎖した際、 YouTubeからどうやって動画を取得していたかが少し話題になりました。
YouTubeAPIには、Flashの動画形式であるflvファイルのパスそのものは記述されていない ため、おそらくいったんページのHTMLを取得して、そこからflvのパスを 取得していると考えられます。
サンプルソースを書いてみました。
var _this=this; var _lv:LoadVars=new LoadVars(); var url="http://www.youtube.com/watch?v=DQoh5DsLJvc"; _lv.sendAndLoad( url, _lv , "POST" ); _lv.onData=function( _str ){ _this.parseHTML( _str ); } function parseHTML( _str ){ var targetLine:String= _str.substring(_str.indexOf("player2.swf"), _str.indexOf("\", \"movie_player") ); var vID=targetLine.substring( targetLine.indexOf("video_id=")+9, targetLine.indexOf("&l=")); var after_t=targetLine.substring( targetLine.indexOf("&t=")+3); var t; if( after_t.indexOf("&")!=-1 ){ t=after_t.substring( 0, after_t.indexOf("&")); }else{ t=after_t; } this._nowFlvPath="http://youtube.com/get_video.php?video_id="+vID+"&l&t="+t; trace("this._nowFlvPath="+this._nowFlvPath); }
パブリッシュしたところ、YouTubeのFLV動画が直接取得できました。 しかしアクセスし過ぎると、YouTubeに弾かれる恐れがあるので、 実行される方は確認程度にとどめてください。
現在は、ニコニコ動画自体からflvファイルを取得することができます。 例えば、下記のビデオの場合。
http://www.nicovideo.jp/watch/sm191763
動画IDである「sm191763」を、下記APIにパラメーターとして付与します。
http://www.nicovideo.jp/getflv?v=sm191763
すると、下記の返り値が取得できます。(user_idとnicknameは仮です。)
thread_id=1177422773& l=270& cms=SMILEVIDEO& url=http%3A%2F%2Fs-clb4.smilevideo.jp%2Fsmile%3Fv%3D191763.75663& link=http%3A%2F%2Fwww.smilevideo.jp%2Fview%3Fvideo_id%3D191763& ms=http%3A%2F%2Fmsg22.nicovideo.jp%2Fapi%2F& user_id=xxxxxx& nickname=xxxxxxx& done=true
URLデコードしてみました。
thread_id=1177422773& l=270& cms=SMILEVIDEO& url=http://s-clb4.smilevideo.jp/smile?v=191763.75663& link=http://www.smilevideo.jp/view?video_id=191763& ms=http://msg22.nicovideo.jp/api/& user_id=xxxxxx& nickname=xxxxxxx& done=true
上記のurlパラメータの値がニコニコ動画のFLV本体です。
試しにダウンロードするプログラムをFlashによるexe形式で作成しました。 ただし現在のニコニコ動画はクローズドサービスなので、あらかじめログイン している必要があります。
なお、上記プログラムは、参照先のプログラムが変更された場合、使用できなくなる可能性がございます。あらかじめご了承ください。また、コメントはFLVファイル外のデータなので、ダウンロードされるのは動画データのみになります。