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

如何通过Python调用Google Calendar API获取多日历事件详情

如何用Python调用Google Calendar API获取多个日历的事件详情

完全可以实现,你之前的问题应该是没有对每个日历ID单独发起API请求并合并结果。下面是基于Google官方quickstart.py的修改方案:

核心思路

把多个日历ID存入数组,循环遍历每个ID,分别调用events().list()接口获取对应日历的事件,最后将所有日历的事件合并到一个列表中,方便后续在界面展示。

修改后的代码示例

1. 定义要获取的日历ID数组

首先在代码里添加家庭成员的日历ID(通常是对应的邮箱地址,或者日历的唯一ID):

# 替换成你的家庭成员日历ID
CALENDAR_IDS = [
    'your-email@example.com',
    'wife-email@example.com',
    'child-email@example.com'
]

2. 编写批量获取事件的函数

替换原quickstart.py中获取单个日历事件的代码,改成批量处理的函数:

from datetime import datetime
import googleapiclient.discovery

def get_all_family_events(service):
    all_events = []
    for calendar_id in CALENDAR_IDS:
        # 获取当前日历的事件
        events_result = service.events().list(
            calendarId=calendar_id,
            timeMin=datetime.utcnow().isoformat() + 'Z',  # 仅获取当前及未来的事件
            maxResults=50,  # 可根据需求调整数量
            singleEvents=True,
            orderBy='startTime'
        ).execute()
        events = events_result.get('items', [])
        
        # 给每个事件标记所属日历(方便展示时区分)
        for event in events:
            event['calendar_owner'] = calendar_id.split('@')[0]
        
        all_events.extend(events)
    
    # 可选:按事件开始时间排序合并后的列表
    all_events.sort(key=lambda x: x['start'].get('dateTime', x['start'].get('date')))
    return all_events

3. 在主流程中调用函数

修改原代码中获取事件的部分,调用上面的函数:

def main():
    # 原quickstart.py中的认证代码保持不变
    creds = None
    # ...(此处省略原认证逻辑)
    
    service = googleapiclient.discovery.build('calendar', 'v3', credentials=creds)
    
    # 调用批量获取函数
    family_events = get_all_family_events(service)
    
    # 打印或处理事件(替换成你的界面展示逻辑)
    if not family_events:
        print('没有找到任何事件。')
    for event in family_events:
        start = event['start'].get('dateTime', event['start'].get('date'))
        print(f"{start} | {event['calendar_owner']}: {event['summary']}")

if __name__ == '__main__':
    main()

关键注意事项

  • 日历权限:确保你要访问的家庭成员日历已经共享给你的Google账号,权限至少设置为「查看所有事件」,否则API会返回权限错误。
  • 分页处理:如果某个日历的事件超过250个(API默认单次返回上限),需要通过pageToken参数循环获取所有事件(可以在函数里添加分页逻辑)。
  • 事件筛选:可以根据需求调整timeMin、timeMax等参数,实现按时间范围筛选事件;也可以添加q参数进行关键词搜索。

内容的提问来源于stack exchange,提问作者Simon Flückiger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:11:19