2012-11-29
2012-11-03
rubyでicalendar形式のファイルを読み込んでgoogleカレンダーに登録する
スケジュールソフトで他のソフトと連携できるようにするためにicalendar形式でデータを出力できるものがあります。
そのファイルをgoogleカレンダーで取り込むことができます。
以下に具体的に説明があります。
http://support.google.com/calendar/bin/answer.py?hl=ja&answer=37118
これと似たようなことをrubyでやる方法です。
条件としては、以下のような感じです。
・icalendarのデータを取り込むための他のデータが入っていない専用のgoogleカレンダーが一つ必要
・取り込む際に、一定期間の登録済みデータを削除する
・単純な繰り返し予定は登録可能
sample.icsファイルを読み込む場合は以下のような感じです。
gclapi
icalendar
vpim
simple-rss
が必要ですのでgemでインストールしてください。
GACCOUNT
GPASSWD
GCALNAME
を利用する環境にあわせて変更すれば利用できるはず。
以下のサイトを参考にさせていただきました。
https://github.com/wtnabe/ical2gcal
http://www.func09.com/wordpress/archives/168
そのファイルをgoogleカレンダーで取り込むことができます。
以下に具体的に説明があります。
http://support.google.com/calendar/bin/answer.py?hl=ja&answer=37118
これと似たようなことをrubyでやる方法です。
条件としては、以下のような感じです。
・icalendarのデータを取り込むための他のデータが入っていない専用のgoogleカレンダーが一つ必要
・取り込む際に、一定期間の登録済みデータを削除する
・単純な繰り返し予定は登録可能
sample.icsファイルを読み込む場合は以下のような感じです。
gclapi
icalendar
vpim
simple-rss
が必要ですのでgemでインストールしてください。
# -*- encoding: utf-8 -*- require 'rubygems' require 'date' require 'gcalapi' require 'icalendar' require 'simple-rss' require 'vpim/icalendar' GACCOUNT = "googleアカウント" GPASSWD = "googleアカウントのパスワード" GCALNAME = "データ登録するgoogleカレンダーの名前" DEL_TERM = 31 #登録済みデータを削除する期間 service = GoogleCalendar::Service.new(GACCOUNT,GPASSWD) g_cals = SimpleRSS.parse( service.calendars.body ).entries gcal_link = nil g_cals.each do |c| if c[:title].encode('utf-8','utf-8') == GCALNAME gcal_link = c[:link] break end end gcal = GoogleCalendar::Calendar::new(service, gcal_link) today = Date.today endday = Date.today + DEL_TERM conditions = {} conditions['start-min'] = today conditions['start-max'] = endday gcal.events(conditions).each do |e| e.destroy! end f = open("sample.ics") ics = f.read f.close ical = Icalendar::parse(ics,true) ical.events.each do |ie| if ie.recurrence_rules? fs = Time.parse(ie.dtstart.to_s.sub(/\+.*/, '')) fe = Time.parse(ie.dtend.to_s.sub(/\+.*/, '')) diff = fe -fs Vpim::Rrule.new(fs,ie.recurrence_rules.first.orig_value).each(endday.to_time) do |time| ge = gcal.create_event ge.title = ie.summary ge.st = time ge.en = time + diff ge.allday = ge.st.hour == 0 and ge.st.min == 0 and ge.en.hour == 0 and ge.en.min == 0 ge.save! end else ge = gcal.create_event ge.title = ie.summary.encode("utf-8") ge.st = Time.parse(ie.dtstart.to_s.sub(/\+.*/, '')) ge.en = Time.parse(ie.dtend.to_s.sub(/\+.*/, '')) ge.allday = ge.st.hour == 0 and ge.st.min == 0 and ge.en.hour == 0 and ge.en.min == 0 ge.save! end end
GACCOUNT
GPASSWD
GCALNAME
を利用する環境にあわせて変更すれば利用できるはず。
以下のサイトを参考にさせていただきました。
https://github.com/wtnabe/ical2gcal
http://www.func09.com/wordpress/archives/168
ラベル:
Ruby
登録:
投稿 (Atom)