2017-01-23 4 views
0
<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. Я использую запрос календаря с методом «ОТЧЕТ». Это дает XML, имеющему занятое время для всех календарей в пределах временного диапазона. Но иногда это не дает занятого времени для определенного календаря. Предположим, у меня есть 3 календаря, иногда это дает занятые времена для всех трех календарей, а иногда только для двух календарей (оставляя тот же календарь). Если я повторю попытку для занятости, тогда он дает занятое время после 7-8 повторных попыток. Но иногда это не дает даже после 7-8 попыток. Что происходит?Иногда занятое время не извлекается из iCloud (с помощью Caldav) для определенного календаря

+0

Эй, может кто-нибудь помочь мне в этом? Почему события из некоторых календарей не были получены? –

+0

Для некоторых календарей занятый никогда не тянет. –

ответ

0

Я не нашел причины, почему это происходит. Но я изменил процесс поиска занятого времени, так что он приносит много времени из всех календарей. Раньше я нажимал этот запрос на URL-адрес: https://PXX-caldav.icloud.com/token/calendars, который не работает последовательно для некоторых конкретных календарей.

Новая процессно:

ШАГ 1: Хит тот же самый запрос на https://PXX-caldav.icloud.com/token/calendars/calendarId это дает URLs всех событий в пределах временного интервала от календаря (для тех, кто так же, для которых я еси не в состоянии получить занятое время). Здесь он дает события из календаря с идентификатором calendarId (идентификатор вашего календаря). Это дает мне XML в чем-то следующий XML -:

<href>/token/calendars/calendarId/event1Id.ics</href> 
<href>/token/calendars/calendarId/event2Id.ics</href> 
<href>/token/calendars/calendarId/event3Id.ics</href> 

Теперь вы должны разобрать XML, чтобы извлечь все адреса.

STEP2: После этого у вас есть все URLs, вы должны ударить одного, нескольких получить запрос, имеющий эти адреса, на одном URL для извлечения данных из этих URL и показать им, как напряженное время.

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> 

Он дает вам данные для всех трех событий. Это поможет вам получить занятое время из каждого календаря. Если вам нужно извлекать события из нескольких календарей, вам нужно повторить эти два шага для каждого календаря.

Смежные вопросы