如何用Python高效导出指定日期范围的公开Google Calendar事件至CSV
用Python导出公开Google日历指定时间段事件到CSV的最优方案
最高效的方式是直接调用Google Calendar官方API,在请求阶段就完成日期过滤,无需额外后续处理,也不用手动导出ICS再转换。以下是具体实现步骤:
1. 前期准备
- 前往Google Cloud控制台启用Calendar API,生成一个API密钥(公开日历无需OAuth授权,API密钥足够)。
- 安装依赖包:
pip install google-api-python-client python-dateutil pandas
2. 完整代码实现
from googleapiclient.discovery import build from dateutil.parser import parse import pandas as pd # 配置参数 API_KEY = "你的API密钥" CALENDAR_ID = "公开日历的ID" # 设置起止日期(格式:YYYY-MM-DD) START_DATE = "2024-01-01" END_DATE = "2024-06-30" # 初始化API客户端 service = build('calendar', 'v3', developerKey=API_KEY) # 转换日期为API要求的RFC3339格式(UTC时区) time_min = f"{START_DATE}T00:00:00Z" time_max = f"{END_DATE}T23:59:59Z" # 请求指定时间段的事件 events_result = service.events().list( calendarId=CALENDAR_ID, timeMin=time_min, timeMax=time_max, singleEvents=True, # 展开重复事件为单独实例 orderBy='startTime' ).execute() events = events_result.get('items', []) # 提取需要的字段(可按需调整) event_data = [] for event in events: # 区分日期型和日期时间型事件 start = event['start'].get('dateTime', event['start'].get('date')) end = event['end'].get('dateTime', event['end'].get('date')) event_data.append({ '标题': event.get('summary', ''), '开始时间': parse(start).strftime('%Y-%m-%d %H:%M:%S') if 'T' in start else start, '结束时间': parse(end).strftime('%Y-%m-%d %H:%M:%S') if 'T' in end else end, '描述': event.get('description', ''), '地点': event.get('location', '') }) # 写入CSV文件 df = pd.DataFrame(event_data) df.to_csv('calendar_events.csv', index=False, encoding='utf-8-sig') print(f"成功导出{len(events)}个事件到calendar_events.csv")
3. 方案优势
- 高效过滤:通过API的
timeMin和timeMax参数在服务器端完成日期筛选,无需拉取全量数据后本地处理。 - 数据直接可用:API返回结构化数据,无需解析ICS文件或二次转换JSON格式,一步生成CSV。
- 灵活扩展:可根据需求轻松添加/修改提取字段(比如会议链接、参与者信息等)。
注意事项
- 确保API密钥已正确启用Calendar API权限。
- 日期格式需严格遵循RFC3339规范,代码中已封装转换逻辑,只需修改
START_DATE和END_DATE即可。 - 若日历包含重复事件,
singleEvents=True会将其展开为独立事件实例,便于完整导出。
内容的提问来源于stack exchange,提问作者user1936752
相关产品推荐
相关产品推荐

