Microsoft Graph API calendarView 是否仅限于一个月?如何获取所有事件?

Is Microsoft Graph API calendarView limited to a single month? How to get all events?

Microsoft Graph API calendarView 是否仅限于一个月?我怎样才能得到所有的事件?是否有一些隐式分页?

我首先检查 2017-01-012018-12-30[=41= 之间事件的 JSON 输出]:

https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2017-01-01T00:00:00.0000000&endDateTime=2018-12-30T00:00:00.0000000

并列出日期

jq '.value[] .start .dateTime'

"2017-11-22T13:30:00.0000000"
"2017-11-23T14:00:00.0000000"
"2017-11-24T14:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T11:00:00.0000000"
"2017-11-27T14:30:00.0000000"
"2017-11-28T09:00:00.0000000"
"2017-11-29T09:00:00.0000000"
"2017-11-29T14:00:00.0000000"

例如,2017 年第 12 个月 没有日历活动!但是我有!

然后通过缩小 2017-12-012018-12-30[=41 之间的日期范围左端来进行类似的调用=],现在我得到:

"2017-12-01T12:30:00.0000000"
"2017-12-01T14:00:00.0000000"
"2017-12-04T08:30:00.0000000"
"2017-12-04T12:00:00.0000000"
"2017-12-06T09:00:00.0000000"
"2017-12-06T10:00:00.0000000"
"2017-12-07T13:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T13:00:00.0000000"

我对 List calendarView and List events 文档感到困惑。

如何获取日历中的所有活动,我可以清楚地看到存在于 2017 年 11 月和 12 月以及 2018 年 1 月和 2 月的活动?

我是否必须在一年中的每个月都重复调用此 API? (我希望我可以打一个电话来获取一年或两年内的所有事件,之后我可以进行过滤、处理等)

列表事件和列表日历视图的区别

当您列出事件 (GET /me/events) 时,您会在日历中得到一个非扩展 项目列表。这意味着如果您有重复发生的事件,您只会在结果中得到系列母版。阅读重复模式并扩展事件将取决于您。

当您列出日历视图 (GET /me/calendarview?...) 时,您会得到一个 扩展的 项目列表。这意味着服务器会展开任何重复发生的事件并构建您的日历的 "view"。因此,在这种情况下,如果您有一个重复发生的事件,而不是获得系列母版,您将获得该系列的一次或多次出现(取决于它在您的视图中重复的次数 window)。由于这项扩展工作,您必须提供开始和结束时间以对通话设置某种界限。

另一种查看方式是,日历视图更像是您在 Outlook 中查看日历时所习惯看到的。

那么我所有的活动呢?

我不知道日历视图的 window 大小有任何具体限制。 (并不是说没有,我只是不知道)。更可能的解释是您没有看到预期的所有事件,因为所有 API 请求 return 集合确实具有内置分页。默认情况下,您只能在响应中包含 10 个项目。您还应该在响应中看到一个 @odata.nextLink,这是您可以用来请求下一页结果的 URL(同样,10 是默认页面大小)。您可以使用 $top 参数增加页面大小,最大为 1000 (IIRC)。

GET /me/calendar/calendarView?startDateTime=2017-01-01T00:00:00.0000000
    &endDateTime=2018-12-30T00:00:00.0000000&$top=1000