You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API获取Google Workspace所有群组的成员?

批量获取Google Workspace所有群组及成员的方案

Google没有提供直接一次性拉取所有群组成员的API,但可以通过组合Admin SDK Directory API的两个接口来实现,具体步骤如下:

核心实现流程

  • 第一步:获取域内所有群组
    使用groups.list接口,指定customer=my_customer参数,即可拉取你管理的Google Workspace域下的全部群组。注意处理分页逻辑:如果群组数量较多,接口会返回nextPageToken,需要循环调用直到没有下一页为止。

  • 第二步:遍历群组获取成员
    对每个拿到的群组,调用members.list接口,传入群组的groupId(或群组邮箱),同样要处理分页,确保获取到该群组的所有成员。

优化建议

  • 使用批量请求
    若域内群组数量多,单独调用每个members.list会产生大量API请求,可使用Google的批量请求机制,一次性发送多个成员查询请求,减少网络开销、提升效率。

  • 注意API配额限制
    Admin SDK有调用配额上限,避免短时间内发起大量请求导致被限流。可添加适当的请求延迟,或实现指数退避策略处理限流错误。

  • 用Google Apps Script快速落地
    不想搭建开发环境的话,直接用Google Apps Script就能实现:在脚本编辑器中启用Admin Directory服务,编写遍历逻辑,还能直接将结果导出到Google Sheets,无需额外部署。

示例代码(Python)

from googleapiclient.discovery import build
from google.oauth2 import service_account

# 初始化API客户端(需提前创建服务账号并完成域授权)
SCOPES = ['https://www.googleapis.com/auth/admin.directory.group', 
          'https://www.googleapis.com/auth/admin.directory.group.member']
SERVICE_ACCOUNT_FILE = 'your-service-account-key.json'
ADMIN_EMAIL = 'admin@your-domain.com'  # 域管理员邮箱

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES, subject=ADMIN_EMAIL)
service = build('admin', 'directory_v1', credentials=credentials)

# 获取所有群组
all_groups = []
page_token = None
while True:
    response = service.groups().list(customer='my_customer', pageToken=page_token).execute()
    all_groups.extend(response.get('groups', []))
    page_token = response.get('nextPageToken')
    if not page_token:
        break

# 批量获取每个群组的成员
group_member_map = {}
for group in all_groups:
    group_id = group['id']
    group_name = group['name']
    members = []
    member_page_token = None
    while True:
        member_response = service.members().list(groupKey=group_id, pageToken=member_page_token).execute()
        members.extend(member_response.get('members', []))
        member_page_token = member_response.get('nextPageToken')
        if not member_page_token:
            break
    group_member_map[group_name] = [m['email'] for m in members]

# 输出结果示例
for group, members in group_member_map.items():
    print(f"【{group}】成员列表:")
    for email in members:
        print(f"- {email}")

内容的提问来源于stack exchange,提问作者dummy email

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:25:58