ics ファイルを作るには
予定表を登録するためにicsのカレンダファイルを作る
ICS ファイルの構造
BEGINーENDで囲まれた内部にテキストを作る。
一番外側の BEGIN:VCALENDAR
BEGIN:VCALENDAR VERSION:2.0 PRODID:takuya_1st-ics-events.rb CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME;VALUE=TEXT:takuyaの予定 BEGIN:VTIMEZONE TZID:Asia/Tokyo BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:JST END:STANDARD END:VTIMEZONE #{ics_events} END:VCALENDAR
予定は VEVENT
BEGIN:VEVENT - END:VEVENTをブロックスとして、複数個の予定を入れていく。
BEGIN:VEVENT DTSTAMP:20150319T172703Z UID:5c9f8d9330dd09857532a82dfd579a48 DTSTART:20150430T030000 DTEND:20150430T040000 DESCRIPTION: お買い物 SUMMARY:牛乳を買いに行く(牛乳、バター、チーズを買う) END:VEVENT
日付時刻のフォーマットサンプル
ruby の strftime でフォーマットするとこんな感じ
events = [ [ [],[],[],[],], [ [],[],[],[],] ... ] events = event.map{|e| { time_at:DateTime.parse( e[1] + " " + e[2] + " JST"), name:e[4], } } ics_events = fx_major_events.map{|e| ical_event = <<-"DATA" BEGIN:VEVENT DTSTAMP:#{DateTime.now.strftime("%Y%m%dT%H%M%SZ")} UID:#{Digest::MD5.hexdigest(e.inspect)} DTSTART:#{(e[:time_at]).strftime("%Y%m%dT%H%M%S")} DTEND:#{(e[:time_at]+1/24.0).strftime("%Y%m%dT%H%M%S")} DESCRIPTION: #{e[:name]} SUMMARY: #{e[:name]} END:VEVENT DATA }.join("\n")