やったこと

webサービスを作るときに考えたことを垂れ流します

ニコニコAPIを叩いてゲットした情報をjsonで返却するスクリプト

ニコニコのgetflv APIを叩いて情報ゲットして、クライアントにjson形式で返却するphpスクリプト作った。

http://hogehoge.php?id=sm12345678」みたいに、GETで動画IDを指定して使います(sm****が動画id)。

クライアントに「スレッドID」と「コメントサーバURL」の情報を返します。

<?php
//ニコニコAPIを叩いて、得た情報をjsonで返却するスクリプト
header('Content-Type: text/javascript; charset=utf-8');

$thread_id = null; //動画id
$ms = null; //コメントサーバのURL

$data = array(
  "mail" => "hoge@hoge.com", // ニコニコ動画のログインメールアドレス
  "password" => "hogege" // ニコニコ動画のログインパスワード
);

if(!empty($_GET['id']) && ctype_alnum($_GET['id'])){
  $videoid = $_GET['id'];
}else{
  //不正な動画idが入っていたら空を返却して終了
  $ret = array(
    "thread_id" => $thread_id,
    "ms" => $ms,
  );
  $json_value = json_encode($ret);
  echo $json_value;
  return;
}

//cookie格納ファイルを動的に生成
$meta = stream_get_meta_data($fp = tmpfile());

// ニコニコ動画にログインする
$ch = curl_init("https://secure.nicovideo.jp/secure/login?site=niconico");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $meta['uri']);  // 受信したCookieを保存
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
curl_close($ch);

// getflv APIを使って動画情報を取得する
$ch = curl_init("http://flapi.nicovideo.jp/api/getflv/" . $videoid);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $meta['uri']); // $cookieFileに保存されたcookieを送信する
$getflv = curl_exec($ch);
fclose($fp);
curl_close($ch);

//getした情報を配列に格納
parse_str($getflv , $parse_result);

//スレッドIDとコメントサーバURLを抽出
$thread_id = $parse_result["thread_id"];
$ms = $parse_result["ms"];

//json形式で返却
$ret = array(
  "thread_id" => $thread_id,
  "ms" => $ms,
);
$json_value = json_encode($ret);
echo $json_value;
?>


下記ページ参考にしました(感謝!)

ニコニコ動画API: getflvとコメントの取得
http://blog.hitobashira.org/?eid=24

PHPで一時的なファイルポインタを扱う方法
http://qiita.com/mpyw/items/f24d3764fe3eedf132ff