ニフティクラウドのmobilebackendのinstallationの検索( limit で件数を増やしてみる辺 )

mobilebackendのダッシュボード（管理画面）には、データハウスのエクスポート機能がありますが、ユーザとして登録されたメールアドレスにダウンロードの案内が届く仕組みの為、人数が多いプロジェクトでは必要な時に情報が手に入りません。
ブラウザからコピー＆ペーストしようとすると悲しい思いをします。（表示通りに取得できない為）
そこで、RestAPIを用いてデータの取得を画策してみます。
デフォルトでは、返却される情報は100件までなので、クエリにlimitを使用して上限の1000件まで取得してみます。

前回の「ニフティクラウドのmobilebackendのinstallationの検索とフィールド追加をPHPでやってみた」と基本は同じでクエリの指定部分を whereからlimitに置き換え（whereとlimit同時に指定もできそう）、結果取得のループで配列に値を格納しています。

```php
<?php
date_default_timezone_set('UTC');

/*
 * シグネチャを作成し返す、下記のプログラムを用いさせていただいています。
 * ニフティクラウド mobile backendの署名処理をPHPで実装してみた
 * http://qiita.com/niftycloud_mb/items/dee4558558e86175ccea
 *
 * $request_method : GET / POST / PUT
 * $request_path : ドキュメントルートからのurl ex) /2013-09-01/installations
 * $data_hash : POST / PUT時のパラメータクエリ
 * $request_timestamp : ISO8601形式の時刻、リクエスト時のX-NCMB-Timestampヘッダと同値
 */
function getSignature($request_method,$request_path,$data_hash,$request_timestamp){

	$method = $request_method;
	$path   = $request_path;
	$hash   = $data_hash;
        $timestamp =  $request_timestamp;

	$header_string  = "SignatureMethod=HmacSHA256&";
	$header_string .= "SignatureVersion=2&";
	$header_string .= "X-NCMB-Application-Key=".APPLICATION_KEY . "&";
	$header_string .= "X-NCMB-Timestamp=".$timestamp;
        if($method == "GET" && $hash != null){
		$header_string .= "&" . http_build_query($hash);
	}
	
	$signature_string  = $method . "\n";
	$signature_string .= FQDN . "\n";
	$signature_string .= $request_path ."\n";
	$signature_string .= $header_string;
	$signature =  base64_encode(hash_hmac("sha256", $signature_string, CLIENT_KEY, true)); 

	return $signature;
}

/*
 *　cUrlにて、mobilebackendAPIへリクエストを実施するクラス。結果をオブジェクトで返す
 * $request_method : GET / POST / PUT
 * $url : mobailebackendAPIのリクエストURL、標準クラス(userやinstallationなど)は専用のAPIがある
 * $headers : X-NCMB-Application-Key / X-NCMB-Timestamp / X-NCMB-Signature / Content-Type
 * $data_hash : POST / PUT時のパラメータクエリ
 */
function requestApi($request_method,$url,$headers,$data_hash){

	$ch  = curl_init();

	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
	
	switch($request_method){
		case "GET":
			curl_setopt($ch,CURLOPT_HTTPGET,true);
			break;
		case "POST":
			curl_setopt($ch,CURLOPT_POST,true);
			if($data_hash != null){
				curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data_hash));
			}
			break;
		case "PUT":
			curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"PUT");
			if($data_hash != null){
				curl_setopt($ch,CURLOPT_POSTFIELDS,$data_hash);
			}
			break;
	}

	$json = curl_exec($ch);
	curl_close($ch);

	$results = json_decode($json);
	return $results;
}

# 固定値は定数にしておく。
define("APPLICATION_KEY","mobilebackendで作成したプロジェクトのアプリケーションキー");
define("CLIENT_KEY","mobilebackendで作成したプロジェクトのクライアントキー");
define("API_VERSION","2013-09-01");　// 多分固定値なので深く考えない
define("FQDN","mb.api.cloud.nifty.com");　// mobilebackendのリクエスト先API

# installationクラスから特定のobjectIdのリストを取得する。
# シグネチャの作成
$request_method = "GET";
$request_path   = "/".API_VERSION."/installations";

/*
# 'where={"objectId":{"$inArray":["objectIdの値その1","objectIdの値その2"]}}' というクエリを実施する
$data_hash['where'] = json_encode(array("objectId" => array('$inArray' => array("objectIdの値その1","objectIdの値その2"))));;
*/

// limit=1000 と言う形のクエリにします。範囲 100 〜 1000
$data_hash['limit'] = 1000;

# 現在時刻をISO8601形式で取得
$t = new DateTime('NOW');
$t->setTimeZone( new DateTimeZone('UTC'));
$request_timestamp = $t->format('Y-m-d\TH:i:s\Z');

# シグネチャを取得
$signature = getSignature($request_method,$request_path,$data_hash,$request_timestamp);

# NCMP API へリクエストを行う準備
$headers = array(
		"X-NCMB-Application-Key: ".APPLICATION_KEY,
		"X-NCMB-Timestamp: ".$request_timestamp,
		"X-NCMB-Signature: ".$signature,
		"Content-Type: application/json"
		);

# GETリクエストなので、パラメータクエリはURLに含める
$url = "https://".FQDN.$request_path."?".http_build_query($data_hash);

# cUrlにてAPIへリクエスト実施
$json_arr = requestApi($request_method,$url,$headers,$data_hash);

$installation_arr = array();
# 取得したinstallationクラスのレコード件数分ループする
foreach( $json_arr->results as $key => $val){
    # 必要なinstallationクラスの値を配列に渡す
    $installation_arr[] = sprintf("%s¥t%s¥t%s",$val->objectId,$val->deviceToken,$val->deviceType); 
}

# タブ区切りのCSV(TSV)ファイルとして出力
file_put_contents("./installations.csv",join("\n",$installation_arr));


```