我正在寻找从一台服务器到另一台服务器的可靠传输caldav条目 - 这是imapcopy
可以做的事情。我正在尝试使用Python caldav implementation,但我不太了解协议,知道如何从一台服务器迁移到另一台服务器。有明显的方法吗?
答案 0 :(得分:2)
我不认为有一个现成的工具可以进行这样的迁移,但如果你能熟练使用Python和urllib2,那么攻击它不应该太难。
您想传输一个日历,还是只传输包含内容的所有日历?您可以更精确地使用所涉及的服务器吗?它是否涉及共享日历?
真正困难的部分是会议。你想迁移吗?如果这不是一个问题,它是相对直接的:
如果它只是一个日历,那么基础很简单。在CalDAV中,日历是包含“iCalendar”资源的WebDAV集合。您可以按原样抓取它们并将它们传输到其他服务器。 您只需在日历URL上执行HTTP PROPFIND即可找出集合中包含的资源的URL。比你做一个简单的HTTP GET来获取iCalendar资源,然后把它放到目标服务器上的日历中。 你甚至不需要在这里使用CalDAV库(即使WebDAV库也有点过分,你只需要解析PROPFIND的XML并使用urllib2来处理请求)。
示例只获取日历中的资源URL(事件和待办事项):
curl --verbose -u "login:pwd" -X PROPFIND -H "Depth: 1"
--data "<propfind xmlns='DAV:'><prop/></propfind>"
https://p00-caldav.icloud.com/xxx/calendars/work/
如果源服务器支持它(通用),则可以使用多重报告来提高效率。 如果目标服务器支持它(很少见),则可以使用批量POST来提高效率。 某些服务器(如iCloud)将附件存储在不同的位置。这可能需要额外的工作。
如果您还想传输日历,也不会太难,但涉及更多的WebDAV。您需要通过在日历主页上执行PROPFIND(包含所有日历的URL)来获取日历的所有属性(名称,颜色)。 CalDAV服务器的主页可以包含非日历,您可以通过查看DAV:resourcetype属性来解决这个问题。对于日历,您可以使用MKCOL或MKCALENDAR在目标服务器上创建它们(这些方法可以使用您要传输的属性)。
获取所有日历的名称,颜色等的示例:
curl --verbose -u "login:pwd" -X PROPFIND -H "Depth: 1"
--data "<propfind xmlns='DAV:'><allprop/></propfind>"
https://p00-caldav.icloud.com/xxx/calendars/