2016/05/02更新

[Python] GoogleカレンダーAPIを使って、日本の祝日を取得する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
仕事で営業日(=土日祝を除く日)につぶやくボットを作っていまして、そこで祝日取得の方法を色々と検討しました。その中で、Googleカレンダーから祝日を取得する方法が良かったので、ブログに残したいと思います。

画像

目次




GoogleカレンダーのAPI有効化と認証キーの取得

Googleの各種サービスはAPI経由で利用可能です。その有効化とキー取得は[API] Google APIを使う際に、APIを有効化して認証キーを取得する方法でブログを書いたので、そちらをご参照ください。
上記作業の結果、サービスアカウントキーで利用するjsonファイルを入手していればOKです。



祝日を取得するためのカレンダー

Googleカレンダーにはいくつか公開されたカレンダーが存在します。その中で、各国の祝日を示すカレンダーが存在します(詳細はカレンダーに祝日の表示を追加 | Google カレンダー の使い方を参照)。

API経由ではja.japanese#holiday@group.v.calendar.google.comのカレンダーを利用します。それでは、次に具体的な実装に進みます。



日本の祝日を取得するための実装

以下のように実装することで、Googleカレンダーから日本の祝日を取得することができます。
from datetime import date
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
import apiclient


### 参考資料はこちら
# https://developers.google.com/google-apps/calendar/quickstart/python


### APIの認証を行う
# API用の認証JSON
json_file = 'secret/yoheim-sample-3178ee6fa5bf.json'
# スコープ設定
scopes = ['https://www.googleapis.com/auth/calendar.readonly']
# 認証情報作成
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scopes=scopes)
http_auth = credentials.authorize(Http())
# API利用できる状態を作る
service = apiclient.discovery.build("calendar", "v3", http=http_auth)


### 祝日を取得する
# カレンダーIDには、日本の祝日カレンダーを指定
calendar_id = "ja.japanese#holiday@group.v.calendar.google.com"
# 2016年の祝日を取得する例
dtfrom = date(year=2016, month=1, day=1).isoformat() + "T00:00:00.000000Z"
dtto   = date(year=2016, month=12, day=31).isoformat() + "T00:00:00.000000Z"
# API実行
events_results = service.events().list(
        calendarId = calendar_id,
        timeMin = dtfrom,
        timeMax = dtto,
        maxResults = 50,
        singleEvents = True,
        orderBy = "startTime"
    ).execute()
# API結果から値を取り出す
events = events_results.get('items', [])
for event in events:
    print("%s\t%s" % (event["start"]["date"], event["summary"]))
"""
2016-01-01  元日
2016-01-11  成人の日
2016-02-11  建国記念の日
2016-03-20  春分の日
2016-03-21  春分の日 振替休日
2016-04-29  昭和の日
2016-05-03  憲法記念日
2016-05-04  みどりの日
2016-05-05  こどもの日
2016-07-18  海の日
2016-08-11  山の日
2016-09-19  敬老の日
2016-09-22  秋分の日
2016-10-10  体育の日
2016-11-03  文化の日
2016-11-23  勤労感謝の日
2016-12-23  天皇誕生日
"""
と、こんな感じで祝日をゲットすることができます。手軽にちゃんとしてそうな祝日データが取得できるのは素敵ですね。



最後に

他にも祝日取得方法として、他サービスのAPIを利用する方法や、自力で計算する方法などありましたが、前者はメンテナンスされているのか不安でしたし、後者は祝日が変更された場合のロジックの修正が面倒と思い、今回の方法にしました。GoogleのAPIも使い慣れてくるとすごく簡単に使えますので、ぜひ試してみていただけたらと思います。

最後になりますが本ブログでは、Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。