【发布时间】:2013-12-01 18:41:14
【问题描述】:
我正在尝试通过 CalDAV 获取 iCloud 日历的日历事件来快速找到空闲/忙碌时间。我能够获得可用的日历,并且根据文档here 或使用DAViCal client library 获取给定日期范围的日历信息应该像将此 REPORT xml 请求发送到日历 URL 一样简单(即 @ 987654323@):
<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop>
<d:getetag />
<c:calendar-data />
</d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="20131115T000000Z" end="20131201T000000Z"/>
</C:comp-filter>
</c:comp-filter>
</c:filter>
</c:calendar-query>
这基本上就是 DAViCal 库中的 GetEvents() 函数所做的。但是,我只是在回复中获取每个日历条目的 URL,而不是日历数据本身:
<?xml version='1.0' encoding='UTF-8'?><multistatus xmlns='DAV:'>
<response>
<href>/..userid../calendars/work/8D2D90EB-BD23-4137-AD22-70D971C587F2.ics</href>
<propstat>
<prop>
<getetag>"C=7734@U=b09ce345-d654-491e-bb4a-55358e7019d9"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/..userid../calendars/work/AA2385AB-EA58-4625-AF87-6D4FB9405686.ics</href>
<propstat>
<prop>
<getetag>"C=7733@U=b09ce345-d654-491e-bb4a-55358e7019d9"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
...
</multistatus>
我当然可以为每个单独的日历项执行 GET 请求,但显然这很慢。在一个请求中下载日历数据有什么技巧吗?
【问题讨论】:
-
无论如何查询事件,似乎都没有返回实际的日历数据以及各个日历项的 href。这个库非常适合解析生成的单个 GET 请求:kigkonsult.se/iCalcreator/docs/using.html#selectComponents after using
$vcalendar->parse($data)
标签: php calendar icloud caldav