Masayan tech blog.

  1. ブログ記事一覧>
  2. PythonでGoogleカレンダーAPIを使用する方法

PythonでGoogleカレンダーAPIを使用する方法

公開日

環境

  • Windows 10
  • Python 3.9.4
  • VSCode

GCPのプロジェクトをセットアップする

GoogleのクラウドサービスであるGoogle Cloud Platform(以下GCP)で各種準備します

GCPプロジェクトを作成する

下記より新しいプロジェクトからプロジェクトを新規作成する

https://console.cloud.google.com/home/dashboard?project=my-daily-task-349202&hl=ja

Google Calendar APIを有効にする

ナビゲーションメニューから、[APIとサービス]→[ライブラリ]を選択する。

検索窓から「Google Calendar API」を検索し、[有効化]をクリックする。

サービスアカウントを作成する

ナビゲーションメニューから、[IAMと管理]→[サービスアカウント]を選択する。

画面上の[+ サービスアカウントを作成]をクリックする

説明に沿ってサービスアカウント名などを入力する。(省略可の項目は省略してもOK)

サービスアカウントの鍵を作成・配置する

サービスアカウントの画面で、該当のサービスアカウントのキータブを選択する。

「JSON」を選択して、鍵を作成する。

作成した鍵を後に作成するPythonプログラムからアクセスできる場所に配置しておいたください

Googleカレンダーの共有設定を編集する

Googleカレンダーを開き、使用するスケジュールの[設定と共有]を選択する。

「特定のユーザーとの共有」のところで、[+ ユーザーを追加]をクリックする。

サービスアカウントのメールアドレスを入力し、[権限]には「変更および共有の管理権限」を選択する。

サービスアカウントのメールアドレス↓

プログラムの作成

pip等で必要なライブラリをインストール

pipenv install google-api-python-client google-auth

予定の取得

  • ざっと最低限のソースコードは以下の通りです。
  • やっていることは大きく下記
    • 用意したjsonファイルを読み込んでgoogle apiの認証
    • googleapiclientのインスタンスを作る(service)
    • serviceのeventsメソッドでカレンダーに登録されているイベントを取得(eventsメソッドについては以下の公式Docの箇所を参照)
      https://developers.google.com/calendar/api/v3/reference/events/list
import googleapiclient.discovery
import google.auth
from shared.Domain.FileSystem.x_file_system_path import XFileSystemPath
from shared.Domain.String.xstr import XStr
import datetime

auth_url = ["https://www.googleapis.com/auth/calendar"]

gapi_creds = google.auth.load_credentials_from_file(
    "your/json/path.json",
    auth_url,
)[0]

service = googleapiclient.discovery.build("calendar", "v3", credentials=gapi_creds)

utc_now_str = datetime.datetime.utcnow().isoformat()
time_min = utc_now_str + "Z"
time_max = datetime.datetime.fromisoformat(utc_now_str) + datetime.timedelta(seconds=1)

calendar_id = "your calendar id"
events = (
    service.events()
    .list(
        calendarId=calendar_id,
        timeMin=time_min,
        timeMax=f"{time_max.isoformat()}Z",
        singleEvents=True,
        orderBy="startTime",
    )
    .execute()
)

print(events) // dict

戻り値は以下のように辞書型です。また、itemsというキー名の配列にイベントが入っていますので、events["items"]とすることで、カレンダーに登録されているイベントの配列を取得することが可能です。

※一部割愛、省略しています。

{
  'kind': 'calendar#events', ・・・・

  'items': [
    {'kind': 'calendar#event', 'id': '', 'htmlLink': '', 'created': '2022-05-04T12:12:32.000Z',            
      'updated': '2022-05-04T12:12:32.963Z', 'summary': 'PCを整理する', 
      'start': {'date': '2022-05-04'}, 'end': {'date': '2022-05-05'} ・・・・
  ]
}まとめ

まとめ

いかがでしたでしょうか。本記事では、PythonでGoogleカレンダーAPIを使用する方法について紹介しています。Googleカレンダーの自動化などを行う際には有効活用できますので、ぜひ参考にしてみてください。