📆
GoogleCalendarAPIの日本の祝日が国民の祝日以外も祝日扱いするようになった件
概要
いつからかはっきり調べられてませんが、Googleカレンダーの「日本の祝日」が、例えば「七夕」や「七五三」や「クリスマス」など国民の祝日ではない日を赤く表示するようになりました。
これはカレンダーの左側の・・・
をクリックし、「設定」から「祝日カレンダーのコンテンツ」を「祝日及びその他の休日」から「休日のみ」に変更すれば治るのですが、GoogleCalendarAPIで取得していた場合どうすればいいのか?というお話です。
コード
古いコード
コードはrubyです。一部抜粋。
end_date = Time.zone.parse("#{params['end']}-01")
url = sprintf(
'https://www.googleapis.com/calendar/v3/calendars/%s/events?key=%s&timeMin=%s&timeMax=%s&orderBy=startTime&singleEvents=true',
'japanese__ja@holiday.calendar.google.com',
Env.fetch('GOOGLE_CALENDAR_API_KEY'),
Time.zone.parse("#{params['start']}-01").strftime('%Y-%m-%dT%H%%3A%M%%3A%SZ'),
end_date.change(day: Time.days_in_month(end_date.month, end_date.year)).strftime('%Y-%m-%dT%H%%3A%M%%3A%SZ')
)
resp = Net::HTTP.get_response(URI.parse(url)).body
どこかで拾ったコードを参考にしたのですが、カレンダーIDがjapanese__ja@holiday.calendar.google.com
となっています。
解決策
Googleカレンダーで設定を変更し、少し下の方にある「このカレンダーID」を見比べるとわかるのですが、「休日のみ」と「祝日及びその他の休日」でカレンダーIDが変わるようです。
タイプ | ID |
---|---|
休日のみ | ja.japanese.official#holiday@group.v.calendar.google.com |
祝日及びその他の休日 | ja.japanese#holiday@group.v.calendar.google.com |
なんか、以前のjapanese__ja@holiday.calendar.google.com
と微妙に違うし、#
が入ってるのでそのまま代入してもダメですね。URLエンコードすればOKです。
def holidays
end_date = Time.zone.parse("#{params['end']}-01")
url = sprintf(
'https://www.googleapis.com/calendar/v3/calendars/%s/events?key=%s&timeMin=%s&timeMax=%s&orderBy=startTime&singleEvents=true',
CGI.escape('ja.japanese.official#holiday@group.v.calendar.google.com'),
Env.fetch('GOOGLE_CALENDAR_API_KEY'),
Time.zone.parse("#{params['start']}-01").strftime('%Y-%m-%dT%H%%3A%M%%3A%SZ'),
end_date.change(day: Time.days_in_month(end_date.month, end_date.year)).strftime('%Y-%m-%dT%H%%3A%M%%3A%SZ')
)
resp = Net::HTTP.get_response(URI.parse(url)).body
self.exports = JSON.parse(resp)
render_json
end
Discussion