プロジェクトからユーザー情報を抽出する方法

この記事では、Cintoo APIを使用して、各プロジェクトのユーザー情報(名前、メールアドレス、役割、権限)を抽出する方法を説明します。これは、二つの個別のAPI呼び出しを行い、ユーザーIDに基づいて結果を結合することで実現できます。


前提条件

  • 有効なCintoo APIのアクセストークン
  • プロジェクトデータとユーザーデータを取得するために必要な権限を持つ、Cintoo Cloud APIへのアクセス
  • PythonおよびREST API呼び出しに関する知識

ワークフロー

個々のプロジェクトからユーザー情報を取得するには、次の手順を実行する必要があります:

  1. /projectsエンドポイントを呼び出して、プロジェクト内のユーザーIDとその役割を取得します。
  2. /usersエンドポイントを呼び出して、詳細なユーザー情報を取得します。
  3. ユーザーIDに基づいて結果を結合し、プロジェクト固有の役割と権限を含む完全なユーザー詳細を取得します。

Pythonスクリプト

import requests

# 自分のアクセストークン、アカウントID、ベースURLに置き換える
access_token = "YOUR_ACCESS_TOKEN"
account_id = "YOUR_ACCOUNT_ID"
base_url = "https://aec.cintoo.com"

# 認可用のヘッダーを設定
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}

# 1. すべてのプロジェクトと、プロジェクト内のユーザーを取得
def get_projects_users():
    url = f"{base_url}/api/accounts/{account_id}/projects"
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        projects = response.json()
        user_roles = {}
        
        # 各プロジェクトからユーザーIDを抽出
        for project in projects:
            project_id = project["id"]
            user_ids = project.get("userIds", [])
            
            # 辞書に役割を追加
            user_roles.update({user_id: {"roles": project.get("permissions", {}), "project_id": project_id} for user_id in user_ids})
        
        return user_roles
    else:
        print(f"Failed to fetch projects: {response.status_code} - {response.text}")
        return {}

# 2. すべてのユーザー詳細を取得
def get_users():
    url = f"{base_url}/api/accounts/{account_id}/users"
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        users = response.json()
        return {user["id"]: user for user in users}
    else:
        print(f"Failed to fetch users: {response.status_code} - {response.text}")
        return {}

# プロジェクトのユーザーデータとユーザー詳細を結合
def join_user_data(user_roles, users):
    complete_user_info = []

    for user_id, role_info in user_roles.items():
        user_details = users.get(user_id)
        if user_details:
            combined_info = {
                "user_id": user_id,
                "name": f"{user_details.get('firstname', '')} {user_details.get('lastname', '')}",
                "email": user_details.get("email", ""),
                "roles": role_info["roles"],
                "project_id": role_info["project_id"]
            }
            complete_user_info.append(combined_info)

    return complete_user_info

# メイン処理
if __name__ == "__main__":
    user_roles = get_projects_users()
    users = get_users()

    if user_roles and users:
        complete_user_info = join_user_data(user_roles, users)
        
        # 結合したユーザー情報を出力または処理
        for user_info in complete_user_info:
            print(user_info)

コードの動作

  1. プロジェクトユーザーの取得:
    • /projectsエンドポイントを使用して、各プロジェクトのユーザーIDと役割を取得します。
  2. ユーザー詳細の取得:
    • /usersエンドポイントを使用して、ユーザー情報(名前、メールアドレスなど)を取得します。
  3. 結果の結合:
    • プロジェクトのユーザーの役割とユーザー詳細を結合し、各プロジェクトの完全なユーザーデータセットを作成します。

要件

  • requests ライブラリをインストールします
    pip install requests
  • プレースホルダー(YOUR_ACCESS_TOKEN、YOUR_ACCOUNT_ID)を実際の値に置き換えます。

注意事項

  • Cintoo APIは認証にJWTトークンを使用します。このトークンはリクエストヘッダーで渡す必要があります。
  • アクセストークンが有効で、ユーザーデータとプロジェクトデータを取得するために必要な権限を持っていることを確認してください。

ベストプラクティス

  • 本番環境で実行する前に、サンドボックス環境でAPI呼び出しをテストしてください。サンドボックスの詳細をご覧ください。
  • API呼び出しの失敗やトークンの有効期限切れに対処するため、エラー処理を実装してください。

追加情報

Cintoo APIのエンドポイントの詳細については、Cintoo APIドキュメントをご覧ください。

この記事は役に立ちましたか?

それは素晴らしい!

フィードバックありがとうございます

お役に立てず申し訳ございません!

フィードバックありがとうございます

この記事に改善できることがあれば教えてください。

少なくとも一つの理由を選択してください
CAPTCHA認証が必要です。

フィードバックを送信しました

記事の改善におけるご協力ありがとうございます。