如何发布Google日历的动态事件Feed?

时间:2010-01-28 22:31:56

标签: google-calendar-api gdata gdata-api atom-feed

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

我真正希望的是一种发布我自己的谷歌日历兼容源并允许用户订阅它的方式,就像他们可以订阅“有趣的日历”一样。因此,如果事件发生变化或添加了新事件,它们将反映在日历中。但看起来Google只允许用户以原始或csv格式导入日历数据,而不是原子Feed格式。

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

我是以错误的方式来做这件事的吗?我是否需要使用gdata API创建日历并向其发布事件?似乎发布一个原子提要会简单得多,但如果谷歌不能订阅原子提要,那就行不通了。

如果我只是将我的活动发布为ICAL文件,google日历会定期重读网址并更新数据吗?有些用户我每天有4或5个事件,因此随着时间的推移,文件会越来越大。这似乎不是一个好的解决方案。

3 个答案:

答案 0 :(得分:8)

查看执行此操作的其他网站,谷歌似乎会定期重新阅读外部日历。

然后由你来修剪你提供的饵料,例如过去杀死日期。

所以要解决你的问题:

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

示例标题&从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
...

答案 1 :(得分:3)

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

Google日历需要数小时才能显示我的更改 - 即使我取消订阅并创建了相同网址的新订阅,我也会看到很久以前删除的活动。

答案 2 :(得分:0)

看起来要可靠地更新您必须使用API​​的Google日历:http://code.google.com/apis/calendar/data/2.0/developers_guide.html虽然我会从务实的角度下注,如果您有一个经常更新的ical文件,您会得到体面的性能