PHPでニコニコ動画のコメント取得
いまさらな話題だが、他のブログの情報を参考にして作ってみた。
意味不明・無駄な部分があるかもしれないが適当に脳内補完してくれ。
以下他ブログからパクった引用
'',"mail" => $mail,"password" => $passwd,"submit" => "",); //POSTの設定
$data = http_build_query($data);
$option = array('http' => array('method' => 'POST','content' => $data));
$context = stream_context_create($option); //contextの作成
$fp = @fopen($url, 'rb', false, $context); //streamを開く
$response = @stream_get_meta_data($fp); //streamからmetaデータの取得preg_match('(user_session=[a-z0-9_]+)',$response[wrapper_data][8],$a);
$this->res_arr=$response;
$this->user_session=$a[0];
}
function get_video_url($video_id){
$context = stream_context_create(array('http'=>array('method'=>'POST','header'=>"Content-type: text/xml\r\nCookie:".$this->user_session.";")));
$res = split("&",urldecode(file_get_contents('http://www.nicovideo.jp/api/getflv?v='.$video_id,false,$context)));
$res[2] = ereg_replace('url=(.*)','\1',$res[2]);
return $res[2];
}
}
$login = new nico_login($mail,$passwd);
//レスポンスを表示ここから
print"";";
print_r($login->res_arr);
print"
//レスポンスを表示ここまで//URL表示
print $login->get_video_url($mov_id);?>
PHPでニコニコ動画の動画URLを取得する。 - PHPに惚れました
このコードを、いろいろ改変してみて
コメントを取得するメソッドを追加してみた。
<?php $mov_id="sm500873"; //動画ID sm500873など $mail="@xxx.com"; //ニコニコのメールアドレス $passwd="pass"; //ニコニコのパスワード Class nico_login{ var $user_session; //ユーザーセッションを格納 var $res_arr; //ログイン時のレスポンスを格納 function __construct($mail,$passwd){ //コンストラクタ $url = "https://secure.nicovideo.jp/secure/login?site=niconico"; $data = array("next_url" => '',"mail" => $mail,"password" => $passwd,"submit" => "",); //POSTの設定 $data = http_build_query($data); $option = array('http' => array('method' => 'POST','content' => $data)); $context = stream_context_create($option); //contextの作成 $fp = @fopen($url, 'rb', false, $context); //streamを開く $response = @stream_get_meta_data($fp); //streamからmetaデータの取得 preg_match('(user_session=[a-z0-9_]+)',$response[wrapper_data][8],$a); $this->res_arr=$response; $this->user_session=$a[0]; } function get_video_url($video_id){ $context = stream_context_create(array('http'=>array('method'=>'POST','header'=>"Content-type: text/xml\r\nCookie:".$this->user_session.";"))); $res = split("&",urldecode(file_get_contents('http://www.nicovideo.jp/api/getflv?v='.$video_id,false,$context))); $res[2] = ereg_replace('url=(.*)','\1',$res[2]); $res[3] = ereg_replace('url=(.*)','\1',$res[3]); $res[4] = ereg_replace('url=(.*)','\1',$res[4]); return $res; } function access_video_url($video_id){ $context = stream_context_create(array('http'=>array('method'=>'GET','header'=>"Content-type: text/xml\r\nCookie:".$this->user_session.";"))); $res = split("&",urldecode(file_get_contents('http://www.nicovideo.jp/watch/'.$video_id,false,$context))); } function get_comment($ms,$user_id,$threadID){ echo $ms,"\n"; echo $user_id,"\n"; echo $threadID,"\n"; $postdata = "<thread user_id=\""; $postdata .= $user_id . "\" res_from=\"-1000\" version=\"20061206\" thread=\""; $postdata .= $threadID . "\" />"; echo $postdata,"\n\n\n"; $context = stream_context_create(array('http'=>array('method'=>'POST','header'=>"Content-type: text/xml\r\nCookie:".$this->user_session .";\r\n"."Content-Length: " . strlen($postdata) . "\r\n\r\n".$postdata."\r\n"))); print_r($context); $res = file_get_contents($ms,false,$context); return $res; } } $login = new nico_login($mail,$passwd); //レスポンスを表示ここから print"<pre>"; print_r($login->res_arr); print"</pre>"; //レスポンスを表示ここまで $login->access_video_url($mov_id); //表示 $items = $login->get_video_url($mov_id); echo $items , "<br /><br />\n\n"; foreach ($items as $item) { echo $item , "<br />\n"; } echo "--------------------<br />"; $items[4] = split('=', $items[4]); $items[5] = split('=', $items[5]); $items[0] = split('=', $items[0]); $comments = $login->get_comment($items[4][1],$items[5][1],$items[0][1]); print_r($comments); ?>
テキトーに書きすぎて読みにくいソースだが勘弁してくれ。
このプログラムは再ログインしない限りセッションが維持できるので連続してコメントを取得できる。
つかれた。(早っ)今日はこの辺で。
もっといい方法があったら教えてください。(ソースください)