调用Google Calendar API清空非主日历事件返回400错误如何解决
问题根因
你遇到的400 Invalid Value报错是因为Google Calendar API的calendars.clear接口有使用限制:该接口仅支持清空用户自身的主日历(调用时calendarId固定传primary即可),所有非主日历(包括你使用的后缀为@group.calendar.google.com的群组日历、自建辅助日历等)都不支持调用该接口,因此你传入非主日历ID会直接返回参数无效错误。
解决方案
如果需要清空非主日历的所有事件,可选择以下两种方案:
方案1:删除重建日历(操作更简便,适合不需要保留原日历ID、共享配置的场景)
先删除目标日历,再新建一个配置完全相同的日历即可,示例代码如下:
# 删除原非主日历 service.calendars().delete(calendarId="你的非主日历ID").execute() # 创建新日历,配置和原日历保持一致 new_calendar = { "summary": "原日历名称", "timeZone": "原日历时区" } service.calendars().insert(body=new_calendar).execute()
方案2:遍历删除所有事件(适合需要保留原日历ID、原有共享权限配置的场景)
先拉取目标日历的全量事件,再逐个删除事件即可,示例代码如下:
page_token = None while True: # 分页拉取日历所有事件 events = service.events().list( calendarId="你的非主日历ID", pageToken=page_token ).execute() # 逐个删除事件 for event in events["items"]: service.events().delete( calendarId="你的非主日历ID", eventId=event["id"] ).execute() page_token = events.get("nextPageToken") if not page_token: break
内容的提问来源于stack exchange,提问作者bergercookie
相关产品推荐
相关产品推荐

