Я пытаюсь быстро найти свободное время, извлекая события календаря для календаря iCloud через CalDAV. Я могу получить доступные календари и в соответствии с документацией here или с использованием DAViCal client library выборка информации календаря для заданного диапазона дат должна быть такой же простой, как отправка этого запроса xml-запроса в URL-адрес календаря (то есть https://caldav.icloud.com/..userid../calendars/work/):Чтение данных календаря Apple/iCloud с использованием PHP/CalDAV
<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>
который по существу то, что делает функция GetEvents()
в библиотеке DAViCal. Тем не менее, я просто получаю 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>"[email protected]=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>"[email protected]=b09ce345-d654-491e-bb4a-55358e7019d9"</getetag>
<getcontenttype>text/calendar</getcontenttype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
...
</multistatus>
Я могу, конечно, сделать запрос GET для каждого отдельного элемента календаря, но очевидно, что это довольно медленно , Есть ли уловка для получения данных календаря, загруженных по одному запросу?
Независимо от того, как события не опрашиваются ничего, кажется, возвращая фактические данные календаря наряду с HREF-х отдельных элементов календаря. Эта библиотека отлично разбиралась в результатах отдельных запросов GET: http://kigkonsult.se/iCalcreator/docs/using.html#selectComponents после использования '$ vcalendar-> parse ($ data)' –