Googleカレンダーを使ってスケジュール管理をしている人も多いことだろう。Googleカレンダーの予定はPythonを使って取得できる。今回は、予定一覧を取得してカウントダウンするプログラムを作ってみよう。
Googleカレンダーについて
Googleが基本的に無料で提供するWebカレンダーが「Googleカレンダー」だ。スマートフォンアプリも提供されており、家族やチームで共有もできるので、利用しているユーザーは多いことだろう。
そして、プログラマーにとって、嬉しい点だかが、このGoogleカレンダーにはAPIが用意されており、自作のプログラムからカレンダーを制御できるようになっているという点だ。簡単なプログラムを利用して、予定の一覧を取得したり、イベントを追加したりすることができる。
今回と次回で、カレンダーから重要な予定を取得して、予定までの日数を取得してメールするプログラムを目指して作ってみよう。それで、今回は、カレンダーのイベントを取得してカウントダウンするところまでを作ってみよう。
Google Calendar APIを使おう
なお、簡単なプログラムを用いて、カレンダーの操作ができるのがメリットであるが、APIを使うためには、Google Cloud Platform(以下GCPと略す)にアクセスしてAPIを有効にしたり、認証情報を取得したりと、少し手間がかかる。とは言え、それほど難しくないので挑戦してみよう。
【手順1】Google Cloud Platformにアクセス
まずは、Webブラウザから、こちら(https://console.cloud.google.com/)のGoogle Cloud Platformにアクセスしよう。
そして、コンソールにログインしたら、最初にプロジェクトを作成しよう。画面上部にあるプロジェクトの選択ボックスをクリックし、プロジェクトを選択の画面がポップアップしたら、「新しいプロジェクト」をクリックしよう。
そして、プロジェクトに適当な名前(例えば「Countdown」など)をつけて「作成」ボタンを押そう。
【手順2】Calendar APIを有効にしよう
次いで、プロジェクトにおけるCalendar APIを有効にしよう。画面左上にある「≡」をクリックして、「APIとサービス > ライブラリ」をクリックしよう。
そして、検索ボックスで「Calendar」を検索して、「Google Calendar API」を選びます。
「有効にする」ボタンをクリックしよう。
【手順3】認証情報をダウンロードしよう
次に、認証情報をダウンロードしよう。画面右上のメニューより「APIとサービス>認証情報」をクリックしよう。そして、画面上部の「+認証情報を作成」をクリックしよう。そして、「サービスアカウント」を選択する。
そして、サービスアカウントを作成しよう。適当な名前を付けてアカウントを作成して、「完了」ボタンをクリックしよう。このとき、サービスアカウントのロールには「オーナー」あるいは「編集権限」を指定しておこう。
なお、この後の作業でアカウントをカレンダーと共有するため、作成されたアカウント(メールアドレスの形式)を覚えておこう。
次に、画面上部の「キー」をクリックして「鍵を追加 > 新しい鍵を作成 > JSON」よりキーを作成しよう。鍵を追加するとJSONファイルがダウンロードされるので、このJSONファイルが認証用のキーとなる。そして、ここでダウンロードしたJSONファイルを「credentials.json」という名前に変更しておこう。
【手順4】カレンダーIDを調べよう
そして、利用したいGoogleカレンダーのIDも調べておこう。カレンダーIDは、Googleカレンダーの画面の左側にある「設定と共有」のメニューから確認できる。
なお、カレンダーIDは、カレンダーの設定の下の方にある。設定画面をスクロールしてIDを確認して、コピーしておこう。
加えて、カレンダーの設定の「特定のユーザーまたはグループと共有する」にて、作成したサービスアカウントで、対象のカレンダーが読み書きできるように追加しよう。
【手順5】プログラムを実行しよう
今回のプログラムを動かすのにあたって、必要なパッケージをインストールしよう。ターミナル(WindowsならPowerShell、macOSならターミナル.app)を起動して、以下のコマンドを実行しよう。
# Windowsの場合
python -m pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
# macOSの場合
python3 -m pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
以上で、準備完了だ。以下のプログラムを「countdown.py」という名前で保存しよう。なお、こちらにもソースコードをアップしている。
以下のプログラムの(*1)のクレデンシャルファイルのパス、そして、(*2)のカレンダーIDを書き換えて保存しよう。
import os
import datetime
from googleapiclient.discovery import build
from google.auth import load_credentials_from_file
# クレデンシャルファイルのパスを指定 --- (*1)
CREDENTIALS_PATH = 'credentials.json'
# カレンダーIDを指定 --- (*2)
CALENDAR_ID = '28e4bb3f327eb238d29a282e9935fc957c40bb3e63ae831b9ecc935bee67efed@group.calendar.google.com'
# スコープの指定
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
# クレデンシャル情報の読み込み --- (*3)
credentials = load_credentials_from_file(CREDENTIALS_PATH, SCOPES)[0]
# Google Calendar APIクライアントの作成 --- (*4)
service = build('calendar', 'v3', credentials=credentials)
# イベントの開始日を指定 --- (*5)
now = datetime.datetime.utcnow()
start_date = now.isoformat() + 'Z'
# イベントの終了日を指定(ここでは30日後まで) --- (*6)
end_date = (now + datetime.timedelta(days=30)).isoformat() + 'Z'
# イベントの一覧を取得 --- (*7)
events_result = service.events().list(
calendarId=CALENDAR_ID,
timeMin=start_date,
timeMax=end_date,
singleEvents=True,
maxResults=30, # 最大30件のイベントを取得
orderBy='startTime'
).execute()
events = events_result.get('items', [])
# イベントを表示 --- (*8)
if not events:
print('イベントは見つかりませんでした。')
else:
print('イベント一覧:')
for event in events:
# イベントの開始時間を取得
target_date = event['start'].get('dateTime', event['start'].get('date'))
# そのイベントまで何日あるか調べて表示 --- (*9)
if 'T' in target_date: # タイムスタンプがあれば除去
target_date = target_date[:10]
now = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
target_td = datetime.datetime.strptime(target_date, '%Y-%m-%d')
days = (target_td - now).days
print(f'{days:2}日 - {event["summary"]}')
プログラムを実行するには、ターミナルを起動して、下記のコマンドを実行しよう。なお、プログラムと同じディレクトリに、手順3でダウンロードした認証ファイルを「credentials.json」という名前で配置しよう。
# Windowsの場合
python countdown.py
# macOSの場合
python3 countdown.py
プログラムを実行すると、下記の画面のように、イベントまでの日数が表示される。
プログラムの(*1)では、クレデンシャルファイルのパスを指定する。(*2)には、GoogleカレンダーのカレンダーIDを指定しよう。