祝日のリストをGoogle Calendar APIを使って作る
祝日判定をやりたいときがたまにある。たとえば、指定した日の次の平日はいつ、とか。
データを自前で抱えるのは面倒なので、Web APIで一覧を取れないかと探してみた。どうやらGoogle Calendar APIでできるらしい。呼ぶ部分をRubyで試作してみる。
require 'set'
require 'date'
require 'open-uri'
require 'rexml/document'
HOLYDAY_URL_PTN = 'http://www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full?start-min=%s&start-max=%s'
class HolidayList < Set
def initialize(from, to)
super()
from_s = from.strftime('%F')
to_s = to.strftime('%F')
open(HOLYDAY_URL_PTN % [from_s, to_s]) {|io|
doc = REXML::Document.new(io)
REXML::XPath.match(doc, '//entry/gd:when/@startTime').each {|elm|
self << Date.parse(elm.to_s)
}
}
end
end
試す。
irb(main):001:0> require 'holidaylist'
=> true
irb(main):002:0> list = HolidayList.new(Date.new(2007, 9, 1), Date.new(2007, 9, -1))
=> #<HolidayList: {#<Date: 4908721/2,0,2299161>, #<Date: 4908733/2,0,2299161>, #<Date: 4908735/2,0,2299161>}>
irb(main):003:0> list.sort.each {|d| puts d.strftime('%F')}
2007-09-17
2007-09-23
2007-09-24
=> [#<Date: 4908721/2,0,2299161>, #<Date: 4908733/2,0,2299161>, #<Date: 4908735/2,0,2299161>]
まぁ、APIまんまなんだけど。このあたりを参考にした。
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/289-bbbead53
