PHP ニコニコ動画 スナップショット検索API サンプル

ニコニコ
 
ニコニコ動画 スナップショット検索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);
	}
}

?>

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です