Иногда время занятости не извлекается из iCloud (с помощью Caldav) для определенного календаря.

<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 календаря, поэтому иногда он дает время занятости для всех 3 календарей, а иногда только для 2 календарей (оставляя один и тот же календарь). Если я повторяю попытку из-за занятости, это дает время занятости после 7-8 повторных попыток. Но иногда не дает даже после 7-8 попыток. Что случилось?


person Priyank Kotiyal    schedule 23.01.2017    source источник
comment
Эй, может кто-нибудь помочь мне в этом? Почему события из некоторых календарей не были получены?   -  person Priyank Kotiyal    schedule 02.03.2017
comment
Для некоторых календарей занятость никогда не вытягивается.   -  person Priyank Kotiyal    schedule 03.03.2017


Ответы (1)


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

Новый процесс-:

ШАГ 1. Отправьте тот же запрос по адресу https://PXX-caldav.icloud.com/token/calendars/calendarId это дает вам URL-адреса всех событий в пределах временного диапазона из календаря (также для тех, для которых я не смог получить время занятости). Здесь он дает события из календаря с идентификатором 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, чтобы получить все URL-адреса.

ШАГ 2: После того, как у вас есть все URL-адреса, вы должны нажать один, несколько запросов на получение, имеющих эти URL-адреса, по одному и тому же 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>

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

person Priyank Kotiyal    schedule 24.03.2017