> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 複数のアカウントを一度に作成する

> バッチリクエストと Python スクリプトでレート制限に対処しながら、Automation API を使用して Kameleoon アカウントを一括作成します。

このガイドでは、[API のレート制限](/developer-docs/apis/automation-api-rest/get-started/get-started#rate-limiting) を順守しつつ、Automation API を使用して複数のアカウントを自動的に作成する方法を説明します。[`/accounts` エンドポイント](/api-reference/account/create-a-new-account) を使用します。

## 前提条件

Automation API を使用する前に、アクセストークンを取得していることを確認してください。

トークンの取得方法については、[認証ガイド](/developer-docs/apis/automation-api-rest/get-started/get-started#1-obtain-an-access-token) を参照してください。リクエストの `Authorization` ヘッダーにトークンを含めます:

```http theme={null}
Authorization: Bearer YOUR_ACCESS_TOKEN
```

## レート制限への対処

Automation API は、リクエストトラフィックを制御するために 2 つのレート制限ウィンドウを適用します:

| 時間枠  | 最大リクエスト数    |
| ---- | ----------- |
| 10 秒 | 50 リクエスト    |
| 1 時間 | 1,000 リクエスト |

多くのアカウントを作成する際にリクエストを早く送信しすぎると、API は `HTTP 429 (Too Many Requests)` レスポンスを返します。

これらの制限を回避するには、リクエストを制御されたバッチで処理します:

* 10 秒ごとに最大 50 リクエストを送信します。
* 1 時間あたり最大 1,000 リクエストを送信します。

たとえば、230 個のアカウントを作成するには、リクエストを次のように分割します:

| バッチ | リクエスト数 | 待機時間   |
| --- | ------ | ------ |
| 1   | 50     | 10 秒待機 |
| 2   | 50     | 10 秒待機 |
| 3   | 50     | 10 秒待機 |
| 4   | 50     | 10 秒待機 |
| 5   | 30     | 完了     |

### 入力データのフォーマット

JSON ファイルでアカウントを定義します。配列の各オブジェクトは、単一のアカウントのリクエスト本文を表します。

```json theme={null}
[
  {
    "firstName": "Elton",
    "lastName": "John",
    "email": "elton@john.com",
    "preferredLocale": "en",
    "password": "pwd",
    "passwordConfirm": "pwd",
    "status": "ACTIVATED",
    "roles": [
      {
        "name": "ROLE_CUSTOMER_ADMIN",
        "sites": [],
        "customers": [99999],
        "privileges": []
      }
    ],
    "isProductRecoAllowed": true,
    "solutions": ["WEB_EXPERIMENTATION", "FEATURE_EXPERIMENTATION"]
  },
  {
    "firstName": "Poussiere",
    "lastName": "Etoile",
    "email": "poussiere@etoile.com",
    "password": "pwd",
    "passwordConfirm": "pwd",
    "preferredLocale": "en",
    "status": "ACTIVATED",
    "roles": [
      {
        "name": "ROLE_CUSTOMER_ADMIN",
        "sites": [],
        "customers": [99999],
        "privileges": []
      }
    ],
    "isProductRecoAllowed": false,
    "solutions": ["WEB_EXPERIMENTATION", "FEATURE_EXPERIMENTATION"]
  }
]
```

### Python を使用してアカウントを作成する

次の Python スクリプトは JSON ファイルからアカウントを読み取り、リクエストを順次送信し、レート制限を自動的に管理します:

```python theme={null}
import json
import time
import requests

API_URL = "https://api.kameleoon.com/accounts"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"

INPUT_FILE = "accounts.json"

MAX_PER_10_SECONDS = 50
MAX_PER_HOUR = 1000

TEN_SECONDS = 10
ONE_HOUR = 3600


def load_accounts(file_path):
    with open(file_path, "r") as f:
        return json.load(f)


def create_account(session, payload):
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json",
    }

    response = session.post(API_URL, json=payload, headers=headers)

    if response.status_code == 429:
        print("Rate limit reached. Waiting 10 seconds...")
        time.sleep(10)
        response = session.post(API_URL, json=payload, headers=headers)
        

    if response.status_code in (200, 201):
        return True, response.json()

    return False, response.text


def process_accounts(accounts):

    session = requests.Session()

    start_hour = time.time()
    hour_count = 0

    for i in range(0, len(accounts), MAX_PER_10_SECONDS):

        batch = accounts[i:i + MAX_PER_10_SECONDS]

        if hour_count + len(batch) > MAX_PER_HOUR:

            elapsed = time.time() - start_hour
            sleep_time = max(0, ONE_HOUR - elapsed)

            print(f"Hourly limit reached. Sleeping {sleep_time:.2f} seconds")
            time.sleep(sleep_time)

            start_hour = time.time()
            hour_count = 0

        batch_start = time.time()

        for account in batch:

            success, result = create_account(session, account)

            if success:
                print("Account created:", result)
            else:
                print("Request failed:", result)

            hour_count += 1

        elapsed = time.time() - batch_start

        if elapsed < TEN_SECONDS:
            sleep_time = TEN_SECONDS - elapsed
            print(f"Waiting {sleep_time:.2f} seconds before next batch")
            time.sleep(sleep_time)


def main():

    accounts = load_accounts(INPUT_FILE)

    print(f"Loaded {len(accounts)} accounts")

    process_accounts(accounts)


if __name__ == "__main__":
    main()
```

***

提供されたスクリプトは、Automation API のレート制限を順守しながら多数のアカウントを安全に作成します。次の処理を行います:

* JSON ファイルからアカウントを読み取る。
* リクエストを順次送信する。
* アカウントを 50 のバッチで処理する。
* 10 秒の制限を強制するためにバッチ間で待機する。
* プロセスが 1 時間あたり 1,000 リクエストの制限に達した場合は一時停止する。

このアプローチにより、レート制限エラーを防ぎ、大規模な移行や一括オンボーディング作業中の信頼性の高いアカウント作成を保証します。
