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

環境

  • Windows 10
  • Python 3.9.4
  • VSCode

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.

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

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

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

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

Google Cloud プラットフォーム

Google Calendar APIを有効にする

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

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

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

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

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

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

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

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

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

masayan
masayan

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

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

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

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

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

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

プログラムの作成

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

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

予定の取得

  • ざっと最低限のソースコードは以下の通りです。
  • やっていることは大きく下記
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
masayan
masayan

戻り値は以下のように辞書型です。また、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学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2023/01/31 18:22時点)
タイトルとURLをコピーしました