我在我的网络空间上运行 ownCloud 以获取共享日历。现在我正在寻找一个合适的 python 库来获得对日历的只读访问权限。我想把日历的一些信息放在一个内网网站上。
我试过http://trac.calendarserver.org/wiki/CalDAVClientLibrary但它总是返回一个NotImplementedError
带有查询命令的,所以我的猜测是查询命令不适用于给定的库。
我可以改用什么库?
我在我的网络空间上运行 ownCloud 以获取共享日历。现在我正在寻找一个合适的 python 库来获得对日历的只读访问权限。我想把日历的一些信息放在一个内网网站上。
我试过http://trac.calendarserver.org/wiki/CalDAVClientLibrary但它总是返回一个NotImplementedError
带有查询命令的,所以我的猜测是查询命令不适用于给定的库。
我可以改用什么库?
我推荐图书馆caldav。
只读在这个库中工作得非常好,对我来说很直接。它将完成获取日历和阅读事件的全部工作,并以iCalendar 格式返回它们。caldav
也可以在文档中获得有关该库的更多信息。
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库来读取特定字段,例如类型(例如事件、待办事项、警报)、名称、时间等 - 一个很好的起点可能是这个问题。
pyOwnCloud可能适合您。我没试过,但它应该提供一个 CMDline/API 来读取日历。
您可能想提供更多关于您如何实际使用 API 的详细信息,但如果查询命令确实没有实现,CalConnect 网站上有其他 Python 库的列表(存档版本,原始链接现在已失效) .
几个月前,我编写了这段代码,从 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)