如何通过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
相关产品推荐
相关产品推荐

