首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有时无法从iCloud (使用Caldav)检索特定日历的繁忙时间

有时无法从iCloud (使用Caldav)检索特定日历的繁忙时间
EN

Stack Overflow用户
提问于 2017-01-23 17:56:08
回答 1查看 108关注 0票数 0
代码语言:javascript
复制
<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次重试之后,它也不会给出结果。这是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2017-03-24 19:05:55

我没有找到它为什么会发生的原因。但是我已经改变了忙碌时间检索的过程,以便从所有日历中提取忙碌时间。之前,我将这个请求发送给URL - https://PXX-caldav.icloud.com/token/calendars,而这个请求对某些特定的日历不起作用。

新流程-:

第1步:https://PXX-caldav.icloud.com/token/calendars/calendarId上执行相同的请求,这将为您提供日历中时间范围内所有事件的urls (对于那些我无法检索繁忙时间的事件也是如此)。在这里,它使用id calendarId(日历的Id)给出日历中的事件。它为我提供了以下xml -形式的xml:

代码语言:javascript
复制
<href>/token/calendars/calendarId/event1Id.ics</href>
<href>/token/calendars/calendarId/event2Id.ics</href>
<href>/token/calendars/calendarId/event3Id.ics</href>

现在,您必须解析xml以检索所有urls。

STEP2:之后你有了所有的url,你必须在同一个url上点击具有这些url的单个、多个get请求,以便从这些url中检索数据并将它们显示为繁忙时间。

代码语言:javascript
复制
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>

它为您提供了所有三个事件的数据。这有助于您从每个日历中检索忙碌的时间。如果您必须从多个日历中检索事件,则必须对每个日历重复这两个步骤。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41803462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档