ver.1サポートサイト


多数レコード取得(PHP)

最終更新日:2023年03月08日

DB検索(database/select)および一覧表(table/data)のAPIを使ってレコードを取得する際は、一度の呼び出しで、lines_per_pageパラメータで指定したレコード件数(最大1,000件)の取得が可能です。

1,000件以上取得したい場合は、1,000件ずつ1ページとしたページ指定(pageパラメータ)を使って、分割して取得してください。

抽出対象のレコード数はAPIレスポンスのcountパラメータで確認できます。

その値をlines_per_pageで割った整数+1のページ数があります。

<?php
define("APIURL", "https://xxxxxxx.smp.ne.jp/api/service");
define("TOKEN", "000737xxxxxxxxxxxxxxxxxxxxe84c0b61b7208961affbaed0f3");
define("SECRET", "582cdd06xxxxxxxxxxxxxxxxxxxxxc31882d45b");
define("LINES_PER_PAGE", 1000);

// 送信するJSONデータのパラメータを設定します
$parameters = array();
$parameters["db_title"] = "testdata";
$parameters["select_columns"] = array("name", "email", "telephone");
$parameters["lines_per_page"] = LINES_PER_PAGE;

// 最初の1ページ目を読み出し、結果を出力します。
$response = database_select($parameters);
$result = json_decode($response, true);
($result["code"] == 0) or die("An error occurred while calling database/select API.\n");
$count = $result["count"];
print_apidata($result["data"]);

// 2ページ以降が存在すれば、APIを呼び出して結果を表示します。
for ($p = 2; $p <= ceil($count / LINES_PER_PAGE); $p++) {
    $parameters = array();
    $parameters["db_title"] = "testdata";
    $parameters["select_columns"] = array("name", "email", "telephone");
    $parameters["lines_per_page"] = LINES_PER_PAGE;
    $parameters["page"] = $p;
    $response = database_select($parameters);
    $result = json_decode($response, true);
    ($result["code"] == 0) or die("An error occurred while calling database/select API.\n");
    print_apidata($result["data"]);
}
echo "\ncount = $count\n";
exit(0);

// database/select API 呼び出し用の関数
function database_select($param_parameters)
{
    $api_headers = array(
        "X-SPIRAL-API: database/select/request",
        "Content-Type: application/json; charset=UTF-8"
    );

    $param_parameters["spiral_api_token"] = TOKEN;
    $param_parameters["passkey"] = time();
    $key = $param_parameters["spiral_api_token"] . "&" . $param_parameters["passkey"];
    $param_parameters["signature"] = hash_hmac('sha1', $key, SECRET, false);
    $json = json_encode($param_parameters);
    $curl = curl_init(APIURL);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
    curl_exec($curl);
    if (curl_errno($curl)) echo curl_error($curl);
    $returnval = curl_multi_getcontent($curl);
    curl_close($curl);
    return $returnval;
}

// API呼び出しデータ出力用の関数
function print_apidata($apidata)
{
    foreach ($apidata as $arecord) {
        foreach ($arecord as $afield) {
            echo mb_convert_encoding($afield, 'CP932', 'UTF-8') . "\t";
        }
        echo "\n";
    }
}
?>