Leyendo los datos del calendario de Apple / iCloud usando PHP / CalDAV

Estoy intentando encontrar rápidamente tiempo libre / ocupado buscando los eventos del calendario para un calendario de iCloud a través de CalDAV. Soy capaz de obtener los calendarios disponibles, y de acuerdo con la documentación.aquí o usando elBiblioteca cliente DAViCal La obtención de la información del calendario para un intervalo de fechas determinado debe ser tan simple como enviar esta solicitud de REPORT xml a una URL del calendario (es decir,https://caldav.icloud.com/..userid../calendars/work/):

<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>

que es esencialmente lo que elGetEvents() La función hace en la biblioteca DAViCal. Sin embargo, solo obtengo la URL de cada entrada de calendario en la respuesta, en lugar de los datos del calendario en sí:

<?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>

Por supuesto, puedo hacer una solicitud GET para cada elemento del calendario individual, pero obviamente esto es bastante lento. ¿Hay algún truco para descargar los datos del calendario en una sola solicitud?

Respuestas a la pregunta(2)

Su respuesta a la pregunta