祝日のリストを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/[email protected]/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まんまなんだけど。このあたりを参考にした。
コメント
コメントの投稿
トラックバック
https://emasaka.blog.fc2.com/tb.php/289-bbbead53