针对node.js将资源与Google日历同步

时间:2016-07-18 23:53:52

标签: javascript node.js google-calendar-api

背景

我一直在node.js中设置推送通知客户端,以观察用户日历/事件的变化。设置calendar.events.watch效果很好,我在myapp.com/notifications上收到sync通知以及表示日历更改的所有推送通知。

问题

现在,当需要轮询这些更新的事件时,我发现最好通过跟踪Google's Synchronize Resources演练来获取syncToken并逐步抓取事件。在他们的java示例中,它们如何获取,存储和刷新syncToken是有意义的。但是,我似乎无法为node.js找到任何类型的文档(或其他任何使用它们的文档)。

问题

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

上下文

这是我的解释为"完全初始同步的代码。" 这是列出的快速入门here.

的延续
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吗?

2 个答案:

答案 0 :(得分:1)

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

来自initial full sync上的文档:

  

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

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

syncToken是Google了解自您上次同步后发送给您的更改事件的方式。

答案 1 :(得分:0)

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

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