将资源与 Google 日历同步,用于节点.js

Synchronize Resources with Google Calendar for node.js

本文关键字:用于 节点 js 同步 日历 资源 Google      更新时间:2023-09-26

>Background

我一直在node中设置一个推送通知客户端.js以监视用户的日历/事件的变化。设置calendar.events.watch工作正常,我在 myapp.com/notifications 收到sync通知以及表示日历更改的所有推送通知。

问题

现在,当需要轮询这些更新的事件时,我发现最好按照 Google 的同步资源演练来完成,以便获取syncToken并逐步获取事件。在他们的java示例中,他们如何获取,存储和刷新syncToken是有意义的。但是,我似乎找不到任何类型的文档(或其他使用它们的人(node.js。

问题

如何获取初始syncToken以在日历上执行初始同步?要么我一直在寻找错误的关键字,要么 node.js 框架目前不支持该功能,我会感到惊讶。

上下文

这是我的代码,我将其解释为"完全初始同步"。这是此处列出的快速入门的延续。

var google = require('googleapis');
...
function listEvents(auth) {
  var calendar = google.calendar('v3');
  calendar.events.list({
    auth: auth,
    calendarId: 'ZZZZZZZZZZZZZZZZZZZ',
    timeMin: (new Date()).toISOString(),
    maxResults: 10,
    singleEvents: true,
    orderBy: 'startTime'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return;
    }
    var events = response.items;
    console.log(response);
  });
}

console.log(response);语句返回...

{ kind: 'calendar#events',
  etag: '"**redacted**"',
  summary: 'me@gmail.com',
  updated: '2016-07-19T00:34:55.921Z',
  timeZone: 'America/New_York',
  accessRole: 'owner',
  defaultReminders: [ { method: 'popup', minutes: 30 } ],
  items:
   [ { kind: 'calendar#event',
       etag: '"**redacted**"',
       id: '**redacted**',
       status: 'confirmed',
       htmlLink: 'https://www.google.com/calendar/event?eid=**redacted**',
       created: '2016-07-19T00:34:55.000Z',
       updated: '2016-07-19T00:34:55.715Z',
       summary: 'Thing',
       creator: [Object],
       organizer: [Object],
       start: [Object],
       end: [Object],
       iCalUID: '**redacted**@google.com',
       sequence: 0,
       reminders: [Object] } ] }

应该在这里找到nextSyncToken吗?

您执行初始完全同步(不需要 syncToken(,作为完全同步响应的一部分,您将获得所有当前日历项目,并且(如果结果已分页,则在最后一页上(您将获得一个名为 nextSyncToken 的字段。 然后,将该nextSyncToken值用于下一次增量同步。

从初始完全同步的文档:

在对列表操作的响应中,您将找到一个名为 nextSyncToken 表示同步令牌。您需要存储 下一个同步令牌的值。如果结果集太大,并且 响应被分页,则仅存在下一个同步令牌字段 在最后一页。

您必须存储同步令牌,直到执行下一次增量同步并将该令牌作为增量同步请求的一部分提供。 当您执行下一次增量同步时,它会为您提供一个新的syncToken您将再次存储该并将其用于下一次增量同步。

通过这种方式syncToken,Google 可以知道自您上次同步以来要向您发送哪些更改事件。

我发现只有当查询参数"orderBy"从请求中排除时,响应才会包含"nextSyncToken"。

所有不支持使用同步令牌的查询参数都记录在标题 nextSyncToken 下的 https://developers.google.com/calendar/v3/reference/events/list 中。