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-01
和 2018-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-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 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 - 列出用户登录的所有权限/范围