如何发布谷歌日历的动态事件源?

Posted

技术标签:

【中文标题】如何发布谷歌日历的动态事件源?【英文标题】:How to publish a dynamic event feed for google calendar? 【发布时间】:2011-01-10 15:19:54 【问题描述】:

我正在构建一个为用户管理特定类型事件的 web 应用。我想提供一种在用户的谷歌日历中显示这些事件的方法。

我真正希望的是一种发布我自己的谷歌日历兼容提要并允许用户订阅它的方法,就像他们可以订阅“有趣的日历”一样。这样,如果事件发生变化或添加了新事件,它们就会反映在他们的日历中。但看起来 google 只允许用户以 ical 或 csv 格式导入日历数据,而不是 atom feed 格式。

问题是,我的 webapp 中的现有事件可以更改并添加新事件。我希望这些更改立即反映在谷歌日历中。而且我不能指望用户继续重新导入 ICAL 文件。以下 SO 问题非常相似,但并没有真正发布答案: Generate a Google Calendar compatible feed

我是不是走错了路?我是否需要使用 gdata API 创建日历并向其发布事件?似乎发布 atom 提要会简单得多,但如果 google 无法订阅 atom 提要,那将无法正常工作。

如果我只是将我的活动发布为 ICAL 文件,谷歌日历会定期重新读取 URL 并更新数据吗?有些用户每天有 4 或 5 个事件,所以文件会随着时间的推移变得越来越大。看来这确实不是一个好的解决方案。

【问题讨论】:

【参考方案1】:

看看其他这样做的网站,谷歌似乎确实定期重新读取 ical 格式的外部日历。

然后由您决定是否修剪您提供的 ical feed,例如取消过去的日期。

所以要解决你的问题:

生成一个 ical 文件并从您的网站提供服务 让您的用户在 Google 日历中订阅它 定期刷新ical文件,修剪旧数据

来自 TripIt.com 的 ics 文件的示例标题和开头,这似乎运作良好:

curl -v http://..../tripit.ics

< HTTP/1.1 200 OK
< Server: nginx
< Date: Fri, 29 Jan 2010 21:53:58 GMT
< Content-Type: text/calendar; charset=utf-8
< Transfer-Encoding: chunked
< Connection: close
< Expires: Fri, 29 Jan 2010 22:08:58 GMT
< Cache-Control: private
< 
BEGIN:VCALENDAR
X-WR-CALNAME:Malcolm Box (TripIt)
X-WR-CALDESC:TripIt Calendar
X-PUBLISHED-TTL:PT15M
PRODID:-//John Papaioannou/NONSGML Bennu 0.1//EN
VERSION:2.0
BEGIN:VEVENT
...

【讨论】:

谢谢,但根据这篇文章,谷歌不能可靠地从 URL 更新:google.com/support/forum/p/Calendar/… 你有以 ical 格式发布的可靠工作的网站示例吗? 我刚刚使用 TripIt 进行了尝试 - 获得了 webcal:// 链接(指向 ics 文件),将其添加到 Google。然后在 tripit.com 添加了另一个事件,返回 google 并立即显示。 谢谢马尔科姆!这看起来很有希望。我希望只需要提供一个 ics 提要来支持谷歌日历、iphone、ical、outlook 等。如果它为tripit工作,那么我应该也可以让它工作。【参考方案2】:

iCal 用户至少可以直接订阅 ics 文件。我发现 iCal 会在 20 分钟左右显示我的更新,甚至我猜测的延迟是因为我正在使用的日历 (JEvents) 只会每隔一段时间更新一次 ics 文件。

Google 日历需要几个小时才能显示我的更改 - 即使我取消订阅并为同一个 URL 创建新订阅,我也会看到很久以前删除的事件。

【讨论】:

【参考方案3】:

看起来要可靠地更新您必须使用 API 的 google 日历:http://code.google.com/apis/calendar/data/2.0/developers_guide.html 虽然我敢打赌,从实用的角度来看,如果您有一个经常更新的 ical 文件,您将获得不错的性能。

【讨论】:

Aerik,我同意——使用 gdata API 可能是最可靠的方法。但它对 iPhone、iCal、Outlook 和其他用户没有帮助。我最终可能最终会使用 gdata,但如果 ics 提要可以在 google 中可靠地使用,我会先尝试。

以上是关于如何发布谷歌日历的动态事件源?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 html 代码将事件添加到指定的谷歌日历

如何使用 android 使用日历 API 在谷歌日历上添加事件?

ios 添加事件到谷歌日历

带有谷歌日历的完整日历

如何传播通过 gdata python api 创建的谷歌日历事件的提醒?

在 android 中以编程方式使用谷歌日历添加同步事件