メインコンテンツまでスキップ

会員データの一括アップロード

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

// 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_idIntegerインポート先のデータベースID。
stored_file_idIntegerupload_stored_files で取得したID。
is_updateInteger登録・更新の方法を指定するフラグ。
0: 登録のみ, 1: 登録と更新, 2: 更新のみ
override_optionsObject各データベース項目をどのように更新するかをキーと値のペアで指定します。

override_options の詳細な設定方法は、仕様書の POST /api/v1/import_members の項目を参照してください。キーには e_{項目ID} を指定します。

<?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_membersPOST /api/v1/export_members といった一括処理 API は、同時に複数実行できません。いずれかの一括処理を実行している間は、他のインポートやエクスポート処理を開始することはできません。

3. 進捗状況の確認

POST /api/v1/import_members で取得した batch_job_id を使って、定期的に POST /api/v1/get_batch_job_status API を呼び出し、処理の進捗を確認します。 progress100 になれば処理は完了です。

<?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;