JavaScript的:+字:谷歌日历服务帐户([removed] Google Calender

2019-10-28 12:54发布

我的应用程序利用火力地堡的登录用户,他们可以访问日历,其中特别是作为一个共同的日历中创建添加和删除保留。

该应用程序了,所以为此目的讲,自己的Gmail地址。 该应用程序通过谷歌API(GAPI客户端)进行访问。

为了使用户能够与日历互动,我发现我只能用日历/应用程序的服务帐户。

到目前为止,我设法:

  • 创建服务密钥的服务帐户,
  • 向服务帐户“虚拟”用户共享日历,
  • 使用该服务密钥(证书)来创建一个JWT令牌(使用jsrsasign库)
  • 做一个POST请求得到一个访问令牌GAPI,
  • 初始化GAPI身份验证和客户端,并已获得通过GAPI日历

现在,当我去取回谷歌日历事件的地步,我也得到一个成功的响应,但事件的阵列是空的,即使有在共享日历可用的测试活动。

响应看起来是这样的:

{
 "kind": "calendar#events",
 "etag": "\"pqef3g4h5j6j0g\"",
 "summary": "my_app_email@appspot.gserviceaccount.com",
 "updated": "2019-01-15T21:14:05.029Z",
 "timeZone": "UTC",
 "accessRole": "owner",
 "defaultReminders": [],
 "items": []
}

有对此#2几个主题,但他们都没有有用的信息,或者它们是Pythin / PHP。

我希望有人可以用这个给出建议为Javascript ...

Answer 1:

我解决了这个...问题是在GAPI请求,获取该事件时。 我用错了calendarId。 我不得不将其值设置为默认的“主要”,而是要使用的实际calendarId,可以在谷歌日历设置下找到>>整合日历。 在我的设置中,calendarId是相关帐户的电子邮件地址。

所以GAPI请求是这样的:

const fetchTimeLimit = new Date(2019, 0, 1).toISOString();

let events = await gapi.client.calendar.events.list({
  calendarId: 'calendar_email@gmail.com',
  timeMin: fetchTimeLimit,
  showDeleted: false,
  singleEvents: true,
  maxResults: 300,
  orderBy: 'startTime'
})
.then(response => {  ........etc


文章来源: Javascript: Google Calender + gapi: service account