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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:12:47