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

Posted

技术标签:

【中文标题】Microsoft Graph API calendarView 是不是仅限于一个月?如何获取所有事件?【英文标题】:Is Microsoft Graph API calendarView limited to a single month? How to get all events?Microsoft Graph API calendarView 是否仅限于一个月?如何获取所有事件? 【发布时间】:2018-02-08 13:20:24 【问题描述】:

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

我首先检查 2017-01-012018-12-30 之间事件的 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 之间的日期范围的左端来执行类似的调用,现在我得到:

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

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

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

【问题讨论】:

【参考方案1】:

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

当您列出事件 (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

【讨论】:

在 List calendarView 文档中澄清这一点会很棒! 我看看我们能做什么:github.com/microsoftgraph/microsoft-graph-docs/issues/2222 这个“10 是默认页面大小”是否记录在某处,在 2020 年仍然如此吗? 在 2020 年检查这一点,显然行为与上述相同。文档也没有改变。

以上是关于Microsoft Graph API calendarView 是不是仅限于一个月?如何获取所有事件?的主要内容,如果未能解决你的问题,请参考以下文章

获取 Microsoft Graph API 的有效访问令牌

Microsoft Graph API SharePoint 文件搜索

如何使用 microsoft graph api 获取 EndRecurrenceDate

Microsoft Graph API - 列出用户登录的所有权限/范围

Microsoft Graph REST API 来更新 Microsoft Planner 任务?

Microsoft graph api预订-与onlinemeeting集成