Rubyで祝日を簡単にGoogle Calendarから取得する方法

Rubyで祝日を簡単にGoogle Calendarから取得する方法。



Rubyで祝日を簡単にGoogle Calendarから取得する方法


RubyのちょっとしたスニペットでGoogle Calendarから祝日を習得するコードです。


# -*- coding: utf-8 -*-
require 'open-uri'
require 'cgi'
require 'json'

class ExCalendar
  def holidays(today = nil)
    api_key = 'API_KEY'
    calendarId = 'ja.japanese#holiday@group.v.calendar.google.com'

    uri = "https://www.googleapis.com/calendar/v3/calendars/#{CGI.escape(calendarId)}/events?orderBy=startTime&singleEvents=true&timeZone=Asia%2FTokyo&timeMin=#{CGI.escape(Time.now.iso8601)}&key=#{api_key}"

    today = (today || Date.today)
    holiday_summaries = []
    JSON.parse(open(uri).read)['items'].each do |item|
      holiday = Date.parse(item['start']['dateTime'] || item['start']['date'])
      if today.to_s == holiday.to_s
        holiday_summaries.push(item['summary'])
      end
    end
    holiday_summaries.push('ただの平日') if holiday_summaries.empty?
    return holiday_summaries
  rescue => e
    return ['祝日取得失敗…']
  end
end

puts ExCalendar.new.holidays(Date.parse("2014-03-21")).inspect

実行結果は下記の通り。


$ ruby holiday.rb
["春分の日"]

いい肉の日(11月29日)のような民間の?記念日は取得することができません。Google Calendarには公式の祝日のみしか掲載されていないためです。


APIキーの取得方法はこのページが分かりやすいです。

GoogleカレンダーAPIキーの取得方法


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール