【问题标题】:How to access Apples iCal-Server via Python如何通过 Python 访问 Apples iCal-Server
【发布时间】:2011-04-15 01:47:14
【问题描述】:

我正在尝试通过 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 从用户的日历中读取某个时间范围内的事件?

【问题讨论】:

  • 您能否提供您正在使用的主要网址。您提到的模块在尝试返回日历对象时完全忽略了响应值。

标签: python icalendar caldav


【解决方案1】:

[不是解决方案,而是调试]

来自 caldav 模块文档中给出的示例:

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

# Principal url
url = "https://user:pass@hostname/user/Calendar"

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

问题

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

调试帮助

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

    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):

【讨论】:

  • 非常感谢您的回答,对调试很有帮助。实际上,我已经安装了 caldav 0.1.4 版本,为此编写了文档。下载 0.1.6 的源代码并添加打印命令后,它突然起作用了。所以我认为有一些问题阻止了 0.1.4 连接到日历服务器。
  • @Hive:如果你能把你的主要网址放在这里就好了。
  • 我尝试了这个 URL:admin:admin@192.168.175.161:8008/principals/__uids__/admin,我在浏览器中访问地址时发现它是主要 URL。但是使用它,找不到日历。它有点适用于这个 URL:admin:admin@192.168.175.161:8008/calendars/users/admin 所以我得到了用户管理员的所有日历(2 * caldav.objects.Calendar),但实际上每个日历上的所有操作(如 date_search 等)都会导致 httplib.CannotSendRequest并且 name 之类的属性是 None。
  • @Hive:我希望我的回答有所帮助。解释为什么主要网址不起作用。问题在于图书馆。它在查询日历时不会更改 url。第二个网址是查询所有日历的方式。让我知道具体情况,也许我可以试试。
  • 由于库的问题,我已经搜索了其他问题,目前正在尝试:trac.calendarserver.org/wiki/CalDAVClientLibrary,我可以在其中启用 HTTP 日志记录。然后进入CalDAVClientLibrary目录,启动python控制台试了一下:import client.account myclient = client.account.CalDAVAccount(server="192.168.1.170", port=8008, user="myuser", pswd="password",主体=“我的用户”,记录=真)。在浏览器中,我可以转到 192.168.1.170:8008/principals/users/myuser 或日历 URL,但在 Python 中,我在 Principal propstat resp status 404 中找到
猜你喜欢
  • 2014-03-29
  • 2014-02-17
  • 1970-01-01
  • 2015-10-10
  • 2020-01-10
  • 2016-03-17
  • 2018-01-15
  • 2018-01-15
  • 1970-01-01
相关资源
最近更新 更多