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