背景

之前我在open-wonderland的一个issue中提了一句,于是王老师给了我一个任务。简单的说,就是给X-lab建设一套日历服务,这样大家check一下自己的日历App就知道一些时间节点了。我调研了两天,基本完成了这个任务,于是顺带着写一篇博客记录一下。

前置知识

.ics文件是遵循iCalendar标准的开放格式文件。简单的说,.ics文件按照一定的格式记录了日历中所有日程的信息,支持.ics格式的日历应用将其导入便可呈现在应用界面中(只读不可编辑)。导入.ics文件是一次性的,我们想要的是“订阅”日历,这样一旦日历发布者更新了日历,订阅者也能保持同步。在这种订阅机制中,发布者给出一个URL,订阅者添加该URL到支持该机制的日历应用中,于是应用每隔一段时间会访问该URL获取最新的.ics文件,从而保持同步。 image.png

CalDAV是WebDAV的扩展。简单的说,如果两个不同的日历应用,叫它们A和B,都支持WebDAV,那么就可以在B上将A添加为一个CalDAV账户,这样在B上就能管理A中的日历,即实现了双向同步。 image.png

如果你是日历发布者

推荐在Google Calendar和Outlook Calendar选一个。下面的表格展示了两者的features:

  Google Calendar Outlook Calendar
有Web版应用? Y Y
界面交互棒? Y Y
支持时区? Y Y
支持日历发布为订阅地址? Y Y
支持日历发布为公开页面? Y Y
支持日历发布为iframe? Y N
支持二次发布日历? Y N
支持CalDAV? Y N
不使用代理也能用? N Y

要不是Google Calendar在国内市场有硬伤——必须使用代理才能访问,我只会推荐它一个。微软由于推自家的Exchange协议,甚至都不支持CalDAV。我来解释一下其中的一些features:“支持日历发布为公开页面”的意思是,任何人可以通过该网址直接访问该日历;“支持日历发布为iframe”的意思是,支持将日历嵌入到自己的网站中,可以很方便地做集成;“支持二次发布日历”的意思是,可以将订阅的第三方日历二次发布出去。

选择好平台后,你只要正常创建日程,然后发布为订阅地址即可。对于不同类型的日程,请创建不同的日历来管理它们!如果有多名日历管理者,可以共用一个号,或是采取CalDAV的方式;如果他们使用同一品牌的日历应用,那将某个日历的编辑权开放给指定管理者是个更好的方式。对于X-lab来说,将已发布日历的订阅地址放在X-lab2017/open-calendar/README.md中也许是个不错的宣传方式~

如果你是日历订阅者

你只需要确保你使用的日历应用支持订阅日历即可。各日历应用订阅第三方日历的操作各不相同,这没什么问题。但是,各日历应用更新订阅的机制(频率)有很大的差别。

举个例子,苹果日历在订阅日历时就能设置更新频率为5min~1周不等,甚至还可以手动刷新;但是Google Calendar的订阅更新频率在8h~12h,还没法修改,也没法手动更新,除非重新订阅一次!如果你订阅的是诸如“中国节日”这样的日历,更新频率是多少完全无所谓;但如果你订阅的是诸如“X-lab会议”这种动态性比较强的第三方日历,那更新频率自然是越高越能做到“up to date”。

PS:如果你是苹果用户,使用自带的日历是最好的!你甚至可以在订阅日历时选择将日历放在icloud中,这样同账户下的其他设备就不需要单独订阅了。

写在结尾

关键是要养成使用日历的习惯,将其融入到自己的workflow中!我之后还会尝试CLI版本的Calendar App,使其与支持CalDAV的日历应用打通。届时再更~