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

この記事では、各プロジェクトごとにCintoo APIを使用してユーザー情報(名前、メール、役割、権限)を抽出する方法を示します。 これは、2つの別々の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"プロジェクトの取得に失敗しました: {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"ユーザーの取得に失敗しました: {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認証が必要です。

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

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