2010-09-21 57 views
3

我想通过Python在Mac OS X Snow Leopard Server上访问Apples iCal-Server。服务器已启动并正在运行,通过iCal-Application进行工作就可以了。 现在,我需要通过Python访问此服务器,以将其用作资源计划的后端。我已经查看了CalDav-Module(http://packages.python.org/caldav/index.html),但在那里提供的示例没有找到任何日历,但Principal-URL正确。如何通过Python访问Apples iCal-Server

那么我怎样才能从用户的日历使用Python读取时间范围内的事件?

+0

您能否提供您正在使用的主要网址。您提到的模块在尝试返回日历对象时完全忽略了响应值。 – pyfunc 2010-10-18 23:03:51

回答

1

[尚未一个解决方案,但调试]

从CalDAV的模块文件中给定的例子:

from datetime import datetime 
import caldav 
from caldav.elements import dav, cdav 

# Principal url 
url = "https://user:[email protected]/user/Calendar" 

client = caldav.DAVClient(url) 
principal = caldav.Principal(client, url) 
calendars = principal.calendars() 

问题

  1. 的网址示例不是ical服务器的主要网址
  2. if yo你看看calendars = principal.calendars()的代码,它会忽略响应。
  3. 如果您的主体网址不正确,则不会发出任何错误,它将只返回空的一组日历。

调试帮助

文件objects.py,还有一个用于DAVObject称为子方法。您可以修改代码以包含一些调试信息。如果您可以粘贴以下内容并粘贴问题中的信息。

response = self.client.propfind(self.url.path, body, depth) 
    print response, self.url.path #provide additional info 
    print response.raw #provide additional info 
    for r in response.tree.findall(dav.Response.tag): 
+0

非常感谢您的回答,它在调试时非常有帮助。其实我已经安装了版本caldav 0.1.4,为此编写了文档。在下载0.1.6的源代码并添加打印命令后,它突然生效。所以我认为有一些固定的东西阻止了0.1.4连接到日历服务器。 – Hive 2010-10-21 14:36:05

+0

@Hive:如果您可以将您的主要网址放在此处,那将会很好。 – pyfunc 2010-10-21 16:38:42

+0

我试过这个URL:http:// admin:[email protected]:8008/principals/__ uids __/admin /这是我在浏览器中访问地址时发现的主要URL。但是使用它,没有找到日历。这种类型的工作与此URL:http://管理员:[email protected]:8008 /日历/用户/管理员/所以我得到了所有用户管理日历(2 * caldav.objects.Calendar),但实际上所有日历搜索等操作会在每个日历中产生一个httplib.CannotSendRequest,并且名称等属性为None。 – Hive 2010-10-22 08:10:05