如何仅从 Office365 中的日历中获取 new/updated 事件?

How do I get only the new/updated events from a calendar in Office365?

我是一名初级开发人员,正在尝试了解 Outlook365 REST API。

我正在使用 office365 rest api 从我的日历同步我的活动。 根据我的第一个请求,我获得了某个时间范围内的所有事件。这 returns 个 deltaToken。 之后,我将更多事件添加到我的日历中,并使用从我的调用返回的最后一个 deltaToken 进行另一个调用。此请求 returns 所有事件(包括新事件)和 2 个 deltaTokens(第一个是我发送的,第二个是新的)。 我只想获取新事件,而不是全部。如果我使用我之前请求中的 deltaToken 发出请求,这是否意味着我已经同步了我之前的所有事件并且下一次调用不应该只获得新的/修改的事件?

以下是回复。我的回复中有 2 个 deltaTokens 可以吗?

{"@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/CalendarView, "value":[list of events], "@odata.deltaLink":"https://outlook.office.com/api/beta/Me/CalendarView/?startDateTime=2017-07-25T00%3a00%3a00Z&endDateTime=2017-09-01T00%3a00%3a00Z&deltatoken=GGXXX&%24deltatoken=GWXXX" }

听起来您没有完成第一次同步。 API 中同步的工作方式有点 counter-intuitive。它不像检查 deltaToken 来查看是否完成那样简单。

原因是第一次请求带Prefer: odata.track-changes总是returns一个deltaToken,即使有是更多的结果。 docs 在这里给出了更多细节,但一般顺序是:

  1. 使用 Prefer: odata.track-changes 在日历视图上执行 GET。
  2. 验证响应中是否存在 Preference-Applied: odata.track-changes header。如果是这样,获取 deltaLink 并对其执行 GET。
  3. 现在进入循环。如果您收到 nextLink 响应,请对其执行 GET 并重复。如果您得到 deltaLink,则同步完成。存储该值直到下次同步。