将icalendar输出导入Google日历

时间:2013-11-24 22:50:45

标签: ruby-on-rails google-calendar-api icalendar

我正在开发一个简单的基于rails的volunteer management system。我想使用Google日历来呈现计划信息。为此,我使用icalendar gem从轮班列表中生成日历:

def generate_ical
  cal = Icalendar::Calendar.new
  @shifts.each do |shift|
    event = Icalendar::Event.new
    event.start = shift.start.strftime("%Y%m%dT%H%M%S")
    event.end = shift.end.strftime("%Y%m%dT%H%M%S")
    event.summary = shift.task.name if shift.task
    event.uid = shift_url(shift)

    cal.add event
  end

  cal.to_ical
end

这个generates an output是这样的:

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:iCalendar-Ruby
BEGIN:VEVENT
DTEND:20131122T230000
DTSTAMP:20131125T003944
DTSTART:20131122T220000
SEQUENCE:0
SUMMARY:Server
UID:http://vols.herokuapp.com/shifts/980190962
END:VEVENT
END:VCALENDAR

当我使用that output作为Google日历的导入时,它不会显示任何事件。它会针对validator进行正确检查。

如果我在Google日历中创建一个包含测试事件的日历,那么它的ical就是:

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Test Calendar
X-WR-TIMEZONE:America/New_York
X-WR-CALDESC:
BEGIN:VFREEBUSY
DTSTART:20131122T150000Z
DTEND:20131122T160000Z
DTSTAMP:20131124T221822Z
UID:524da491ab22d035230d4c46e3b3334ed79d7c35@google.com
ATTENDEE;X-NUM-GUESTS=0:mailto:dhappy.org_22edpsb9hrffs8qh857qsnngfo@group.calendar.google.com
SUMMARY:Busy
END:VFREEBUSY
END:VCALENDAR

它使用不同的块名称:VFREEBUSY而不是VEVENT。我在谷歌日历中找到了VEVENTs的在线参考,所以这可能不是问题。有没有人有把这个宝石连接到Google日历的经验,谁可以指出我需要改变的东西?

2 个答案:

答案 0 :(得分:0)

您的问题在于Google日历上的导出设置。转到要导出的日历的日历设置。在页面上的“日历地址”部分下,单击“更改共享设置”。现在取消标记为“仅共享我的忙/闲信息(隐藏详细信息)”的框。

答案 1 :(得分:0)

您需要确保设置正确的标题:

def index
  respond_to do |format|
    format.ics do
      headers['Content-Type'] = "text/calendar; charset=UTF-8"  # Google Calendar likes this!
      render :text => @cal.to_ical
    end
  end
end

来源:https://stackoverflow.com/a/493379

编辑:

这对我来说暂时起作用,所以必须有另一个因素。