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)

