2022年1月23日日曜日

日本の祝日情報をgoogle-api-python-clientで取得


背景

Google calendarの情報は、API Keyを発行してgoogle-api-python-clientで読み込むことで扱えます。
今回祝日情報が欲しかったので、python-clientを通して取得してみました。
API Keyの発行や関数の呼び出しの具体例や参考リンクを備忘録を兼ねて記事として共有します。

使ったもの

  • python3をインストールしたPC
  • googleアカウント

Google Calendar用のAPI Keyを発行

下記の流れでGoogle Calendar APIの有効化とAPI Keyの発行ができます。
Googleの管理画面は配置や構成の変更が頻繁に行われそうなので、文字とリンクのみで説明します。
  1. Google Cloud Platformでプロジェクトを作成
  2. Google Calendar APIを有効化
  3. CredentialsページでAPI Keyを作成
    自分が試した時は、ページ上部のCreate credentialsから作れました。

作成したAPI Keyをpythonで利用します。

google-api-python-clientを設定

READMEなどでvirtual envを利用した方法が紹介されているので、それに従い「calendar-test」という名前の環境にインストールします。
Raspberry PiなどのSBCをカレンダー専用端末にする場合は、virtualenv無しでも良い気はします。
pip3 install virtualenv
virtualenv calendar-test
source calendar-test/bin/activate
pip3 install google-api-python-client

google-api-python-clientで祝日情報を取得

下記のスクリプトで日本の祝日の日付と名前を表示できます。
「your api key」を自身で作成したものに書き換えてください。
from googleapiclient.discovery import build
apiKey = 'your api key'

service = build('calendar', 'v3', developerKey=apiKey)
req_holidays = service.events().list(calendarId='ja.japanese#holiday@group.v.calendar.google.com').execute()
holidays = req_holidays['items']

def get_start_date(holiday):
return holiday['start']['date']

holidays.sort(key=get_start_date)

for holiday in holidays:
print('%s %s' % (holiday['start']['date'], holiday['summary']))

APIの書き方はこれらのサイトを参考にしました。
API Keys - google-api-python-client
Getting started - google-api-python-client
Python Quickstart | Calendar API

要所を解説します。

カレンダー機能の呼び出し時にAPI Keyを渡します。
from googleapiclient.discovery import build
apiKey = 'your api key'

service = build('calendar', 'v3', developerKey=apiKey)

日本語表記の日本の祝日情報はja.japanese#holiday@group.v.calendar.google.comのIDのカレンダーとして扱われているため、それを指定してcalendar-apiのeventsのlist関数で一覧を取得します。
GUIではgoogleの日本の休日カレンダーで情報を確認できます。
req_holidays = service.events().list(calendarId='ja.japanese#holiday@group.v.calendar.google.com').execute()

祝日の配列は取得した情報のitemsキーに含まれます。
holidays = req_holidays['items']

日付順に並んでないので、並び替えます。
def get_start_date(holiday):
return holiday['start']['date']

holidays.sort(key=get_start_date)

日付と休日名を一覧で表示します。
for holiday in holidays:
print('%s %s' % (holiday['start']['date'], holiday['summary']))

記事を書いた時点(2022.01.23)で表示できた祝日一覧はこちらです。
2021年から2023年の祝日が登録されていました。
2021-01-01 元日
2021-01-11 成人の日
2021-02-11 建国記念の日
2021-02-23 天皇誕生日
2021-03-20 春分の日
2021-04-29 昭和の日
2021-05-03 憲法記念日
2021-05-04 みどりの日
2021-05-05 こどもの日
2021-07-22 海の日
2021-07-23 体育の日
2021-08-08 山の日
2021-08-09 休日 山の日
2021-09-20 敬老の日
2021-09-23 秋分の日
2021-11-03 文化の日
2021-11-23 勤労感謝の日
2022-01-01 元日
2022-01-10 成人の日
2022-02-11 建国記念の日
2022-02-23 天皇誕生日
2022-03-21 春分の日
2022-04-29 昭和の日
2022-05-03 憲法記念日
2022-05-04 みどりの日
2022-05-05 こどもの日
2022-07-18 海の日
2022-08-11 山の日
2022-09-19 敬老の日
2022-09-23 秋分の日
2022-10-10 体育の日
2022-11-03 文化の日
2022-11-23 勤労感謝の日
2023-01-01 元日
2023-01-02 元日 振替休日
2023-01-09 成人の日
2023-02-11 建国記念の日
2023-02-23 天皇誕生日
2023-03-21 春分の日
2023-04-29 昭和の日
2023-05-03 憲法記念日
2023-05-04 みどりの日
2023-05-05 こどもの日
2023-07-17 海の日
2023-08-11 山の日
2023-09-18 敬老の日
2023-09-23 秋分の日
2023-10-09 体育の日
2023-11-03 文化の日
2023-11-23 勤労感謝の日

振替休日も登録されていました。
2021-08-08 山の日
2021-08-09 休日 山の日

eventsのlist関数は期間をtimeMinとtimeMaxで指定できます。
2021年5月の祝日の取得は下記のような呼び出しで可能です。
req_holidays = service.events().list(
calendarId='ja.japanese#holiday@group.v.calendar.google.com',
timeMin='2022-05-01T00:00:00Z', timeMax='2022-06-01T00:00:00Z').execute()
2022-05-03 憲法記念日
2022-05-04 みどりの日
2022-05-05 こどもの日

終わり

google-api-python-clientで日本の休日情報を取得できました。

参考

googleapis/google-api-python-client
API Keys - google-api-python-client
Getting started - google-api-python-client
Python Quickstart | Calendar API
googleの日本の休日カレンダー
google-calendar-holiday

0 件のコメント :