本を読む

読書やコンピュータなどに関するメモ

祝日のリストを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

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad