使用node.js与谷歌日历同步资源

4

背景

我正在使用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吗?

2个回答

3
进行最初的全量同步(不需要同步令牌syncToken),在全量同步响应中,可以获得所有当前日历条目,并且(如果结果被分页)在最后一页上可以获得一个名为nextSyncToken的字段。使用该nextSyncToken值进行下一次增量同步。
根据最初的全量同步文档
在列表操作的响应中,您将找到一个名为nextSyncToken的表示同步令牌的字段。您需要存储nextSyncToken的值。如果结果集太大并且响应被分页,则nextSyncToken字段仅出现在最后一页。
您必须存储同步令牌,直到进行下一次增量同步,并将该令牌作为增量同步请求的一部分呈现。进行下一次增量同步时,它将为您提供一个新的syncToken,您将再次存储并用于下一次增量同步。
这个syncToken是Google知道在最后一次同步以来应向您发送哪些更改事件的方式。

你在哪里可以找到 google.calendar('v3');calendar.events.list(...) 的文档?我在这里找到了 gapi.client.calendar.events.list() 的文档:https://developers.google.com/google-apps/calendar/quickstart/js。你可能需要嗅探网络并查看实际发送和接收的 HTTP 请求。 - jfriend00
我用来测试的代码几乎是 Node.js 类别下面列出的 JavaScript 代码的翻版。https://developers.google.com/google-apps/calendar/quickstart/nodejs - schrismartin
我会给你支票以确认我应该期待它的到来。非常感谢你的帮助。 - schrismartin
@ChrisMartin - 你搞清楚导致这个问题的原因了吗? - jfriend00
我不确定问题最终是什么,但经过几次迭代后,同步令牌出现在你说的位置。我希望我知道启用因素是什么。 - schrismartin
显示剩余4条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接