null

通过 Google API 自动添加 Google Calendar Events

前段时间在更新网络学堂监控脚本时,加了一个自动添加作业截止日到谷歌日历的功能。之前是将作业推送到 Trello 然后再通过它官方自带的自动化流程添加到日历上,但因为 Trello 的 npm 源太老了,于是构思着直接通过 Google API 添加到日历,没有中间商赚差价。途中得益于 Google 企业级的文档,陆陆续续踩了一堆坑,现记录下来。

首先登陆 console.cloud.google.com ,新建一个新的项目,然后在该项目中启用「API 和服务」并在 API 库中搜索添加 Google Calendar API。

image-20210919211040061

接着在「API 和服务」里面添加凭据,如果只是自己一个人用的话推荐添加一个「服务账号」就可以了,不需要启用 OAuth 2.0。然后在「IAM 和管理」中导出该服务账号的秘钥下载到本地,如果没有就自己建一个,使用 SDK 登陆的时候需要用到。

image-20210919220007364

至此我们已经可以通过认证了,但为了让脚本能够修改日历,我们还需要在日历上给服务账号加权限。打开我们想要修改的日历的「共享与设置」,点击「与特定的人分享」中的「添加共享对象」,将服务账号的邮箱添加进去并给予「更改活动」的权限,这样服务账号也就能看到该日历了,给予更高一级的「进行更改和管理共享设置」权限也没问题。

image-20210919222204166

注意,因为服务账号本质上也是一个可用的账号(只是不能登录而已),也可以拥有自己的私人日历,而 API docs 上的 CalendarList 只能看到私人日历,所以通过服务账号使用 CalendarList 函数是看不到任何日历的,即便是刚给予权限的日历,也只能通过指定 CalendarId 的方式获取到日历实例。

Update 2024/06/02:上述说明有误。CalendarList 只能看到私人日历和已确认的共享日历,所以需要通过调用 calendarList().insert 的方法将共享日历添加进列表内,然后就可以通过 CalendarList 获取到该共享日历了。具体可见 StackOverflow

支持一下
资助 Nano 让 Nano 吃得更胖!
  • 微信扫一扫
  • 支付宝扫一扫