7

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

我首先检查 和 之间的事件的 JSON2017-01-01输出2018-12-30

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-01然后通过缩小和之间的日期范围的左端来进行类似的调用2018-12-30,现在我得到:

"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 calendarViewList events文档感到困惑。

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

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

4

1 回答 1

19

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

当您列出事件 ( GET /me/events) 时,您会在日历中获得一个未扩展的项目列表。这意味着如果您有重复事件,您只会在结果中获得系列大师。您可以阅读重复模式并扩展事件。

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

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

那么我的所有活动在哪里?

我不知道日历视图的窗口大小有任何具体限制。(不是说没有,我只是不知道)。更可能的解释是您没有看到所有预期的事件,因为所有返回集合的 API 请求都具有内置分页。默认情况下,您在响应中限制为 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
于 2018-02-08T14:37:16.010 回答