使用Google Calendar与node.js同步资源
背景
我一直在node.js中设置一个推送通知客户端来监视用户的日历/事件的变化。 设置calendar.events.watch
完美工作,我收到myapp.com/notifications sync
通知,以及所有推送通知表示日历中的变化。
问题
现在,当需要轮询这些更新的事件时,我发现最好通过遵循Google的“同步资源”演练来获取syncToken
并逐步获取事件。 在他们的java例子中,它们是如何获取,存储和刷新syncToken
的。 但是,我似乎无法find任何types的文档(或任何其他人使用它们)node.js.
题
如何获取初始syncToken
在日历上执行初始同步? 或者我一直在寻找错误的关键字,或者node.js框架中目前不支持这个function,这让我感到惊讶。
上下文
这是我的代码,我解释为“完全初始同步”。 这是此处列出的快速入门的延续。
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] } ] }
应该在这里findnextSyncToken
吗?
你做一个初始的完全同步(不需要syncToken),作为完整的同步响应的一部分,你得到所有当前的日历项目和(在最后一页,如果结果是分页),你会得到一个名为nextSyncToken
的字段。 然后,您使用nextSyncToken
值进行下一次增量同步。
从最初的完全同步文档:
在对列表操作的响应中,您会发现一个名为nextSyncToken的字段,代表同步令牌。 你需要存储nextSyncToken的值。 如果结果集太大并且响应得到分页,则nextSyncToken字段仅出现在最后一页上。
您必须存储同步令牌,直到您执行下一个增量同步,并将该令牌作为增量同步请求的一部分呈现。 当您执行下一个增量同步时,它会给您一个新的syncToken
,您将再次存储并用于下一个增量同步。
syncToken
是Google知道自上次同步以来要向您发送哪些更改事件的方式。