会員データの一括アップロード
KREISEL には、管理画面から会員データをアップロードする機能がありますが、JSON API を利用しても同様の処理が可能です。
API を利用した会員データの一括アップロードは、以下のステップで行います。
| フェーズ | 説明 | 必要な処理 |
|---|---|---|
| 1 | アップロードするファイルをKREISELに転送し、stored_file_id を取得します。 | POST /api/v1/upload_stored_files を呼び出します。 |
| 2 | 転送したファイルを使って、会員データの一括インポート処理を開始します。 | POST /api/v1/import_members を呼び出します。 |
| 3 | 一括処理の進捗状況を確認します。 | POST /api/v1/get_batch_job_status を呼び出します。 |
| 4 | (任意)インポート結果のログファイルをダウンロードします。 | POST /api/v1/get_batch_job_result を呼び出します。 |
各ステップを詳しく見ていきましょう。
1. ファイルのアップロード
まず、POST /api/v1/upload_stored_files を利用し、インポートしたい会員データが記載された CSV(または TSV)ファイルを KREISEL にアップロードします。
この API は、ファイル名を指定し、ファイルの中身を UTF-8 (LF) 形式で送信します。
呼び出しに成功すると、後続の import_members API で必要となる stored_file_id が返されます。
- PHP
<?php
// APIエンドポイントと認証情報
$environmentId = getenv("ENV_ID");
$apiUrl = "https://krs.bz/$environmentId/api/v1/upload_stored_files";
$apiToken = getenv("API_TOKEN");
// アップロードするファイルのパス
$filePath = 'upload.csv';
// ファイルの内容を読み込み
$fileContent = file_get_contents($filePath);
// リクエストボディの作成
$requestData = [
'file_name' => basename($filePath),
'body' => $fileContent,
];
$ch = curl_init($apiUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($requestData),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$responseData = json_decode($response, true);
$storedFileId = $responseData;
echo "ファイルアップロード成功! Stored File ID: ", $storedFileId;
} else {
echo "ファイルアップロード失敗: ", $response;
exit;
}
// この後、取得した $storedFileId を使って import_members を呼び出す
アップロードできるファイルの最大容量は 50MB です。50MB を超えるファイルをアップロードしようとすると、API はエラーを返します。 また、同時に実行できるアップロード処理は 1 つだけです。複数のファイルをアップロードする場合は、1 つ目の処理が完了してから次の処理を開始してください。
2. 会員データのインポート
POST /api/v1/upload_stored_files で取得した stored_file_id を使い、POST /api/v1/import_members API を呼び出してインポート処理を開始します。
この API を呼び出すと、一括処理のステータスを追跡するための batch_job_id が返されます。
| 引数 | データ型 | 説明 |
|---|---|---|
member_table_id | Integer | インポート先のデータベースID。 |
stored_file_id | Integer | upload_stored_files で取得したID。 |
is_update | Integer | 登録・更新の方法を指定するフラグ。0: 登録のみ, 1: 登録と更新, 2: 更新のみ |
override_options | Object | 各データベース項目をどのように更新するかをキーと値のペアで指定します。 |
override_options の詳細な設定方法は、仕様書の POST /api/v1/import_members の項目を参照してください。キーには e_{項目ID} を指定します。
- PHP
<?php
// 前のステップから続く...
$importApiUrl = "https://krs.bz/$environmentId/api/v1/import_members";
// e_24 (複数選択) はマージ、e_25 は強制上書き、他は通常更新
$overrideOptions = [
"e_21" => "normal",
"e_22" => "normal",
"e_23" => "normal",
"e_24" => "merge",
"e_25" => "force",
"e_26" => "normal"
];
$importRequestData = [
'member_table_id' => 1,
'stored_file_id' => $storedFileId,
'is_update' => 1, // 登録と更新を行う
'override_options' => $overrideOptions,
];
$ch = curl_init($importApiUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($importRequestData),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$responseData = json_decode($response, true);
$batchJobId = $responseData;
echo "インポート処理を開始しました。 Batch Job ID: ", $batchJobId;
} else {
echo "インポート処理の開始に失敗しました: ", $response;
exit;
}
POST /api/v1/import_members や POST /api/v1/export_members といった一括処理 API は、同時に複数実行できません。いずれかの一括処理を実行している間は、他のインポートやエクスポート処理を開始することはできません。
3. 進捗状況の確認
POST /api/v1/import_members で取得した batch_job_id を使って、定期的に POST /api/v1/get_batch_job_status API を呼び出し、処理の進捗を確認します。
progress が 100 になれば処理は完了です。
- PHP
<?php
// 前のステップから続く...
$statusApiUrl = "https://krs.bz/$environmentId/api/v1/get_batch_job_status";
$progress = 0;
while ($progress < 100) {
$statusRequestData = ['batch_job_id' => $batchJobId];
$ch = curl_init($statusApiUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($statusRequestData),
]);
$response = curl_exec($ch);
$statusData = json_decode($response, true);
curl_close($ch);
$progress = $statusData['progress'] ?? 0;
$operation = $statusData['operation'] ?? '不明';
echo sprintf("%s\t進捗 : %d%\n", $operation, $progress);
if ($progress < 100) {
sleep(5); // 5秒待機して再確認
}
}
echo "インポート処理が完了しました。", PHP_EOL;