ニコニコ動画 スナップショット検索APIというのを見つけたので、サンプルを書いてみた。
いずれTwitter bot(新着動画bot的な)等に使おうかなと思ったけど、
検索結果は、毎日AM5:00に保存された情報から返されます。
らしく、情報の鮮度がイマイチ。
サンプルコード
<?php //******************************************************************************************** /** * @file ニコニコ動画スナップショット検索API 利用サンプル * @brief * * * @author @loftkun */ //******************************************************************************************** main(); //******************************************************************************************** /** * @brief main処理 */ //******************************************************************************************** function main(){ //検索クエリ $query = $_GET["q"]; if($query == "") { $query="将棋";//とりあえず将棋で検索しよう } //ログファイルサイズチェック checkLog(); printLog("[main] start. query=". $query); search($query); printLog("[main] end."); } //******************************************************************************************** /** * @brief 検索 */ //******************************************************************************************** function search($query){ //期間(yyyy-MM-dd HH:mm:ss) $from = date('Y-m-d H:i:s', strtotime('-2 day'));//今から2日前 $to = date('Y-m-d H:i:s');//今 //json生成 $json = array( 'query' => $query, 'service' => array('video'), 'search' => array('title', 'description', 'tags'), 'join' => array('cmsid', 'title', 'start_time'),//ここはいろいろ情報が取れるのでドキュメント参照 'filters' => array('type' => 'range', 'field'=> 'start_time', 'from' => $from,//いちおう指定してるけど、いまいち 'to' => $to, //効いてないくさいのはなんでだろ 'include_upper'=> true, ), 'sort_by' => 'start_time', 'order' => 'desc', 'from' => 0, 'size' => 10, 'issuer' => 'c-loft.com'//ここは開発するアプリケーションの名前に変えて下しあ ); //jsonエンコード $data = json_encode($json); //POST $url = 'http://api.search.nicovideo.jp/api/snapshot/';//スナップショット検索APIエンドポイント $response = curlPost($url, $data); echo $response; } //******************************************************************************************** /** * @brief HTTP POST */ //******************************************************************************************** function curlPost($url, $postField){ $headers = array('Content-type: application/json'); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $postField); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); return $response; } //******************************************************************************************** /** * @brief ログファイルサイズチェック */ //******************************************************************************************** function checkLog(){ $filename = "./tmp.log"; $size = filesize( $filename ); if($size != false) { if($size > (20*1024*1024)) { unlink($filename); } } } //******************************************************************************************** /** * @brief 標準出力及びログファイルへ出力 */ //******************************************************************************************** function printLog($buf) { $date = date('Y/m/d(D) H:i', time()); $buf .= "<br>\n"; //標準出力(default) //echo $date." ".$buf; //標準出力(SJIS) //コマンドプロンプトで動作時、文字化けする場合などはSJISに変換して表示 //echo mb_convert_encoding($buf, "SJIS", "UTF-8"); if(true){ //ログファイルへ出力 $fp = fopen("./tmp.log", "a+"); fputs($fp, $date." ".$buf); fclose($fp); } } ?>