用于访问CalDAV服务器的Python库

时间:2013-07-13 20:41:26

标签: python-2.7 caldav owncloud

我在我的网站空间上运行ownCloud以获取共享日历。现在我正在寻找一个合适的python库来获得对日历的只读访问权限。我想在Intranet网站上提供日历的一些信息。

我已经尝试了http://trac.calendarserver.org/wiki/CalDAVClientLibrary,但它总是返回带有查询命令的NotImplementedError,所以我的猜测是查询命令不能很好地与给定的库一起使用。

我可以使用哪种图书馆?

4 个答案:

答案 0 :(得分:6)

我推荐图书馆caldav

只读对这个库非常有效,看起来很直接。它将完成获取日历和阅读事件的整个工作,并将其返回iCalendar format。有关caldav库的更多信息也可以在documentation

中获取
import caldav

client = caldav.DAVClient(<caldav-url>, username=<username>,
                          password=<password>)
principal = client.principal()
for calendar in principal.calendars():
    for event in calendar.events():
        ical_text = event.data

从此开始,您可以使用icalendar库来读取特定字段,例如类型(例如事件,待办事项,警报),姓名,时间等。 - 一个好的起点可能是{{3} }。

答案 1 :(得分:0)

您可能希望提供有关如何实际使用API​​的更多详细信息,但如果查询命令确实未实现,则CalConnect website上有其他Python库的列表(存档版本, original link现在已经死了。)

答案 2 :(得分:0)

pyOwnCloud对你来说是正确的。我没有尝试过,但它应该提供一个用于阅读日历的CMDline / API。

答案 3 :(得分:0)

几个月前,我编写了此代码,以从CalDAV提取数据以将其显示在我的网站上。 我已将数据更改为JSON格式,但是您可以对数据进行任何操作。

我添加了一些打印件供您查看,您可以在生产中删除它们。

    from datetime import datetime
import json
from pytz import UTC # timezone
import caldav
from icalendar import Calendar, Event

# CalDAV info
url = "YOUR CALDAV URL"
userN = "YOUR CALDAV USERNAME"
passW = "YOUR CALDAV PASSWORD"

client = caldav.DAVClient(url=url, username=userN, password=passW)
principal = client.principal()
calendars = principal.calendars()

if len(calendars) > 0:
    calendar = calendars[0]
    print ("Using calendar", calendar)
    results = calendar.events()
    eventSummary = []
    eventDescription = []
    eventDateStart = []
    eventdateEnd = []
    eventTimeStart = []
    eventTimeEnd = []

    for eventraw in results:

        event = Calendar.from_ical(eventraw._data)
        for component in event.walk():
            if component.name == "VEVENT":
                print (component.get('summary'))
                eventSummary.append(component.get('summary'))
                print (component.get('description'))
                eventDescription.append(component.get('description'))
                startDate = component.get('dtstart')
                print (startDate.dt.strftime('%m/%d/%Y %H:%M'))
                eventDateStart.append(startDate.dt.strftime('%m/%d/%Y'))
                eventTimeStart.append(startDate.dt.strftime('%H:%M'))
                endDate = component.get('dtend')
                print (endDate.dt.strftime('%m/%d/%Y %H:%M'))
                eventdateEnd.append(endDate.dt.strftime('%m/%d/%Y'))
                eventTimeEnd.append(endDate.dt.strftime('%H:%M'))
                dateStamp = component.get('dtstamp')
                print (dateStamp.dt.strftime('%m/%d/%Y %H:%M'))
                print ('')

    # Modify or change these values based on your CalDAV
    # Converting to JSON
    data = [{ 'Events Summary':eventSummary[0], 'Event Description':eventDescription[0],'Event Start date':eventDateStart[0], 'Event End date':eventdateEnd[0], 'At:':eventTimeStart[0], 'Until':eventTimeEnd[0]}]
    data_string = json.dumps(data)
    print ('JSON:', data_string)