それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ics カレンダを作る。サンプルデータ

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")