如何通过GAS或Calendar API获取谷歌Workspace组织所有用户的工作地点?
批量获取Google Workspace组织内所有用户的工作地点
前提条件
- 拥有Google Workspace Enterprise账户的超级管理员权限,或已被授予读取所有用户日历数据的权限
- 在Google Cloud控制台中启用Calendar API和Admin SDK Directory API
- 已创建并配置好服务账号,完成域范围委派(Domain-Wide Delegation),获取服务账号密钥文件
实现步骤
1. 获取组织内所有用户列表
使用Admin SDK的Directory API遍历获取组织下所有用户的主邮箱地址,作为批量操作的基础:
from googleapiclient.discovery import build from google.oauth2 import service_account # 定义所需权限范围 SCOPES = [ 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/calendar.readonly' ] # 替换为你的服务账号密钥文件路径 SERVICE_ACCOUNT_FILE = '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 ) # 调用Directory API获取用户列表 directory_service = build('admin', 'directory_v1', credentials=credentials) users_result = directory_service.users().list( customer='my_customer', # 'my_customer'代表当前域 maxResults=500, orderBy='email' ).execute() users = users_result.get('users', []) # 提取所有用户的主邮箱 user_emails = [user['primaryEmail'] for user in users]
2. 批量获取每个用户的工作地点
遍历用户邮箱列表,调用Calendar API的Settings接口获取每个用户的workingLocation设置:
# 初始化Calendar API服务 calendar_service = build('calendar', 'v3', credentials=credentials) # 遍历用户批量获取工作地点 for email in user_emails: try: # 获取用户的工作地点设置 setting = calendar_service.settings().get( setting='workingLocation', userId=email ).execute() # 输出或存储结果 print(f"用户: {email}, 工作地点: {setting.get('value', '未设置')}") except Exception as e: print(f"获取用户 {email} 工作地点失败: {str(e)}")
关键注意事项
- API配额限制:Calendar API存在调用频率限制,批量操作时建议添加适当延时(如
time.sleep(1)),避免触发配额拦截 - 权限配置:服务账号必须在Google Workspace管理控制台中完成域范围委派,确保能访问所有用户的日历数据
- 空值处理:部分用户可能未设置工作地点,需处理
value字段为空的情况 - 分页处理:如果组织内用户超过500人,需要处理Directory API的分页结果,循环调用
users().list()直到获取所有用户
内容的提问来源于stack exchange,提问作者IMTheNachoMan
相关产品推荐
相关产品推荐

