<C:calendar-query xmlns:D='DAV:'
xmlns:C='urn:ietf:params:xml:ns:caldav'>
<D:prop>
<D:getetag/>
<C:calendar-timezone xmlns:D='DAV:' xmlns:C='urn:ietf:params:xml:ns:caldav'></C:calendar-timezone>
<C:calendar-data>
<C:expand start='20170116T031008Z'
end='20170131T031008Z'/>
<C:comp name='VCALENDAR'>
<C:prop name='VERSION'/>
<C:comp name='VEVENT'>
<C:prop name='SUMMARY'/>
<C:prop name='DESCRIPTION'/>
<C:prop name='STATUS'/>
<C:prop name='TRANSP'/>
<C:prop name='ATTENDEE'/>
<C:prop name='UID'/>
<C:prop name='DTSTART'/>
<C:prop name='DTEND'/>
<C:prop name='DURATION'/>
<C:prop name='RRULE'/>
<C:prop name='RDATE'/>
<C:prop name='EXRULE'/>
<C:prop name='EXDATE'/>
<C:prop name='RECURRENCE-ID'/>
</C:comp>
</C:comp>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name='VCALENDAR'>
<C:comp-filter name='VEVENT'>
<C:time-range start='20170116T031008Z'
end='20170131T031008Z'/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
嗨,我正在使用caldav扩展来从iCloud日历中检索繁忙时间(按时间范围)。我正在使用带有“REPORT”方法的日历查询。它为XML提供了时间范围内所有日历的繁忙时间。但有时它并没有给特定日历带来繁忙时间。假设我有3个日历,有时它会为所有3个日历提供繁忙时间,有时仅为2个日历提供繁忙时间(通过保留相同的日历)。如果我重试忙,那么它会在7-8重试后给出忙碌时间。但有时它甚至在7-8重试后也没有给出。发生了什么事?
答案 0 :(得分:0)
我没有找到原因,为什么会发生这种情况。但是我已经改变了繁忙时间检索的过程,因此它会带来所有日历的繁忙时间。之前我将此请求发送到网址 - https://PXX-caldav.icloud.com/token/calendars,该网址不能用于某些特定的日历。
新流程 - :
第1步:在https://PXX-caldav.icloud.com/token/calendars/calendarId点击相同的请求,这会为您提供日历中时间范围内所有事件的网址(对于那些我无法使用的日历)检索忙碌的时间)。在这里,它提供来自日历的事件,其中包含id calendarId(您的日历&ID; ID)。它给了xml以下xml - :
<href>/token/calendars/calendarId/event1Id.ics</href>
<href>/token/calendars/calendarId/event2Id.ics</href>
<href>/token/calendars/calendarId/event3Id.ics</href>
现在您必须解析xml以检索所有网址。
第2步:之后您拥有所有网址,您必须点击具有这些网址的单个,多次获取请求,在同一网址上从这些网址中检索数据并将其显示为忙碌时间。
URL -: https://PXX-caldav.icloud.com/token/calendars/calendarId
Request -:
<C:calendar-multiget xmlns:d='DAV:' xmlns:C='urn:ietf:params:xml:ns:caldav'>
<d:prop>
<d:getetag />
<C:calendar-data>
<C:comp name='VCALENDAR'>
<C:prop name='VERSION'/>
<C:comp name='VEVENT'>
<C:prop name='SUMMARY'/>
<C:prop name='DESCRIPTION'/>
<C:prop name='STATUS'/>
<C:prop name='TRANSP'/>
<C:prop name='ATTENDEE'/>
<C:prop name='UID'/>
<C:prop name='DTSTART'/>
<C:prop name='DTEND'/>
<C:prop name='DURATION'/>
<C:prop name='RRULE'/>
<C:prop name='RDATE'/>
<C:prop name='EXRULE'/>
<C:prop name='EXDATE'/>
<C:prop name='RECURRENCE-ID'/>
</C:comp>
</C:comp>
</C:calendar-data>
</d:prop><d:href>/token/calendars/calendarId/event1Id.ics</d:href>
<d:href>/token/calendars/calendarId/event2Id.ics</d:href>
<d:href>/token/calendars/calendarId/event3Id.ics</d:href>
</C:calendar-multiget>
它为您提供所有三个事件的数据。这有助于您从每个日历中检索忙碌时间。如果您必须从多个日历中检索事件,则必须为每个日历重复这两个步骤。