[Python] GoogleカレンダーAPIを使って、日本の祝日を取得する
こんにちは、@yoheiMuneです。
仕事で営業日(=土日祝を除く日)につぶやくボットを作っていまして、そこで祝日取得の方法を色々と検討しました。その中で、Googleカレンダーから祝日を取得する方法が良かったので、ブログに残したいと思います。
上記作業の結果、サービスアカウントキーで利用するjsonファイルを入手していればOKです。
API経由では
最後になりますが本ブログでは、Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
仕事で営業日(=土日祝を除く日)につぶやくボットを作っていまして、そこで祝日取得の方法を色々と検討しました。その中で、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の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!