Pythonを使ってGoogle Calendarの予定を取得する方法

PythonからGoogle Calendarの予定を取得する方法を学んだので記事にしました。

まず、環境セットアップ方法について解説します。次に、Pythonを使って現在時刻から先の予定を取得する方法について解説します。

それでは始めましょう!

この記事はこんな人におすすめ!

  • Google Calendarから予定を取得するプログラムを作りたい人
  • Python初心者
目次

環境セットアップ方法

PythonからGoogle Calendarを操作するには、Googleが公開しているGoogle Calendar APIを利用する必要があります。

そのため、Pythonスクリプトを作成する前に以下の事前準備が必要となります。

  • Google Cloud Platformでプロジェクトを新規作成する
  • Google Calendar APIを有効にする
  • OAuthクライアントIDの作成
  • OAuth同意画面の設定
  • Google クライアント ライブラリをインストール

Google Cloud Platformでプロジェクトを新規作成

Google Calendar APIは、Google Cloud PlatformというGoogleが提供するクラウドコンピューティングサービスで有効化することができます。

これらを有効化するには新規プロジェクトを作成しなければいけません。

Google Cloud Platformのページを開き、左上のバーを選択して新しいプロジェクトを選択しましょう。

プロジェクト名を入力して作成ボタンを押すと、新規プロジェクトが作成できます。

Google Calendar APIを有効化

続いてGoogle Calendar APIを有効化します。

Google Calendar APIは、Google Calendarから予定を取得したり、予定を作成するためのAPIです。

「APIとサービス」→「ライブラリ」を選択します。

Google Calendar APIを検索し、有効にします。

OAuthクライアントIDの作成

PythonスクリプトからGoogle CalendarにアクセスするにはクライアントIDを取得する必要があります。

[APIとサービス]>[認証情報]>[認証情報を作成]>[OAuthクライアントID]をクリック。

アプリケーションの種類は「デスクトップアプリ」を選択。名前は適当に入力し、作成をクリックします。

JSONファイルをダウンロードしておきましょう。

OAuth同意画面の設定

PythonからGoogle CalendarにアクセスするとGoogleの同意画面が表示されます。その際の同意画面を設定します。

メニューの[OAuth同意画面]からUser Type「外部」を選択し、「作成ボタン」をクリックします。

アプリ名、ユーザーサポートメール、デベロッパーの連絡先情報を入力して、「保存して次へ」ボタンをクリック。

続いてアクセス権を設定します。

Google クライアント ライブラリをインストール

今度はPython側の準備です。Googleクライアントライブラリをインストールします。

ターミナルで以下のように打つとGoogleクライアントライブラリがインストールできます。

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Pythonを使って現在時刻から先の予定を取得

ここからはPythonスクリプトの解説です。

サンプルスクリプト

下記は現在時刻から先の予定を取得するPythonサンプルスクリプトです。

from __future__ import print_function
import datetime
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    creds = None
    
    # token.pickleファイルにユーザーアクセストークンとリフレッシュトークンが保存され、
    # 認証が初めてのときにtoken.pickleは自動的に作成される
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
        
     # 資格情報が有効でなければ、ユーザーログインさせる
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
            
        # 次回実行時には認証が省略される
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('calendar', 'v3', credentials=creds)
        # Calendar情報の取得
        now = datetime.datetime.now().isoformat() + 'Z'
        print('現在時刻から先の予定を10個取得')
        events_result = service.events().list(calendarId='******@group.calendar.google.com', timeMin=now,
                                              maxResults=10, singleEvents=True,
                                              orderBy='startTime').execute()
        events = events_result.get('items', [])
        if not events:
            print('予定が1つもありませんでした')
            return
        # 取得したカレンダー情報を表示
        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            print(start, event['summary'], event['location'], event['description'])
            
        
    except HttpError as error:
        print('An error occurred: %s' % error)

if __name__ == '__main__':
    main()

最初にGoogle認証を行ったのち、現在時刻から先の予定を10件まで取得します。

スクリプト解説

現在時刻から先の予定を取得

下記は予定を取得する部分です。

events_result = service.events().list(calendarId='******@group.calendar.google.com', timeMin=now,
                                      maxResults=10, singleEvents=True,
                                      orderBy='startTime').execute()
events = events_result.get('items', [])

calendarIdは何を設定すればいいの?

Google Calendarメニューの[設定]>[カレンダーの設定]>[カレンダーの統合]に移動すると@group.calendar.google.comで終わる「カレンダーID」を確認することが出来ます。

予定名・時間・場所・説明を表示

下記は予定を表示する部分です。

for event in events:
    start = event['start'].get('dateTime', event['start'].get('date'))
       print(start, event['summary'], event['location'], event['description'])

startは開始時刻、summaryは予定名、locationは場所、descriptionは説明です。

実行結果

それではPythonスクリプトを実行していきましょう!

Google Calendarには下図の予定1~4を追加しています。本日は5/21なので、予定2~4が取得できるはずです。

Pythonスクリプトを実行するとWebブラウザが立ち上がり、アカウントの選択が求められます。

アクセス許可したアカウントを選択しましょう。

自作アプリのため、「このアプリはGoogleで確認されていません」と表示されます。警告を無視して「続行」ボタンを押しましょう。

次も「続行」ボタンを押します。

ターミナルを見て下さい。予定2~4の時間、場所、説明がターミナル上に表示されるはずです。

2023-05-23T12:00:00+09:00 予定2 新宿 ランチ
2023-05-26T20:00:00+09:00 予定3 六本木 ディナー
2023-05-31T23:00:00+09:00 予定4 浅草 ジム

まとめ

PythonからGoogle Calendarの予定を取得する方法について解説しました。

  • Google Calendar APIの環境セットアップ
  • 現在時刻から先の予定を取得するPythonスクリプトの実践

この記事がPythonを学ぶ皆さんのためになれば幸いです。

独学が大変な方は、書籍やスクールを活用するのも手です。私も活用しているものを載せておきますので参考にして下さい。

最後までお読み頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次