iCloud vcalendar多个事件

时间:2015-02-16 23:05:09

标签: python caldav

我正在尝试一次将多个事件插入到iCloud日历中。如果我使用这个vcalendar,一切正常:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
END:VCALENDAR

但是,如果我将事件数量加倍,就像这样,我会收到“非禁止”的错误。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
BEGIN:VEVENT
UID:12345678
DTSTART:20150214T170000Z
DTEND:20150214T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event or is it
END:VEVENT
END:VCALENDAR

我发送PUT请求(当然我已经过身份验证,也因为第一个请求成功):
https://p01-caldav.icloud.com:443/xxxxxxxx/calendars/work/xxxxxxx.ics

具体错误是:

<?xml version='1.0' encoding='UTF-8'?>
<error 
    xmlns='DAV:'>
    <valid-calendar-object-resource 
        xmlns='urn:ietf:params:xml:ns:caldav'/>
    </error>

对于为什么会发生这种情况的任何想法,更重要的是:如何解决它?

1 个答案:

答案 0 :(得分:4)

与此问题类似:Adding events to Davical server using Http request and DDay.iCal

iCloud日历是CalDAV服务器。在CalDAV中 (RFC 4791 Section 4.1) 日历中的每个事件/待办事项由不同的HTTP资源表示 因此需要有不同的URL。

您正在尝试将多个事件放入一个资源中,这就是为什么 &#39; valid-calendar-object-resource&#39;提出前提条件(不是有效的CalDAV 资源,因为它包含多个不属于重复集的VEVENT部分。)

没有RFC标准方法一次向DAV添加多个项目 服务器,但有些(包括Apple CalendarServer和iCloud)支持此批量上传草稿: Calendar Server Bulk Change Requests for *DAV Protocols

基本上,在您的情况下,不要对/xx/calendars/work/abc.ics进行PUT,而是尝试POST到/ xx / calendars / work /。 然后,服务器将为您创建单独的日历子资源。

P.S。:您的请求中还有一个额外的错误。您对多个事件(不属于重复集)使用相同的UID(12345678)。您需要分配唯一的UID。