如何通过Google Calendar API恢复已删除的重复日程实例?
恢复Google Calendar已删除重复日程实例的正确实现方案
问题根因
- 已删除的重复日程实例默认状态为
cancelled,属于父级重复日程下的例外实例,直接对父日程调用PATCH修改状态既不会作用到单个被删实例,也会触发权限错误 - 返回
forbidden通常为两个原因:- OAuth授权凭证缺少
https://www.googleapis.com/auth/calendar.events或https://www.googleapis.com/auth/calendar的必要编辑权限scope,只读scope无法修改日程状态 - 调用PATCH接口时传入的是父级重复日程的ID,而非被删除的单个实例的专属ID,谷歌日历不允许通过修改父日程状态恢复子实例
- OAuth授权凭证缺少
正确操作步骤
步骤1:获取已删除的单个实例ID
调用Events.list接口,传入以下参数:
eventId:父级重复日程的IDshowDeleted:设置为TruetimeMin、timeMax:限定待恢复实例所在的时间范围,缩小检索范围
返回结果中状态为cancelled的条目对应的id,就是待恢复的单个实例专属ID
步骤2:调用接口恢复实例
不要使用PATCH接口,直接调用Events.update接口,传入上一步拿到的单个实例ID,请求体仅需包含以下内容即可:
{ "status": "confirmed" }
步骤3:前置权限校验
- 确认申请的OAuth scope至少包含
https://www.googleapis.com/auth/calendar.events,如果操作的是他人共享的日历,需要确认当前账号有该日历的编辑权限 - 如果使用服务账号调用接口,需要确认已经开启全域委托,且模拟的目标用户对该日历有编辑权限
常见踩坑说明
不要通过修改父级重复日程的字段恢复实例,所有修改必须作用到被删除的单个实例本身
调用Events.get接口查询单个实例时,必须加上showDeleted=True参数,否则会直接返回404,误以为实例已经被永久删除
内容的提问来源于stack exchange,提问作者Dhilip Palanisamy
相关产品推荐
相关产品推荐

