見出し画像

ChatGPTで複数の予定をGoogleカレンダーに登録するプログラム作成

私は複数回の予定をGoogleカレンダーに登録する際、テキストファイルで予定を用意したものをPythonプログラムに読み込ませ、登録していました。

このPythonプログラムを作成する部分ですが、ChatGPTを使えば誰でも簡単に、しかも自分の好きなフォーマットで出来るのでご紹介します。

今回の方法ではPythonプログラミングもGoogle Colaboratoryを使うので、Googleアカウントがあれば誰でもできちゃいます。

一度プログラムを用意しておけば、あとはテキストファイルを書き換えるだけで簡単に複数回予定登録ができるので、便利ですよ。ぜひチャレンジしてみてくださいね。

全体イメージ

やりたいことのイメージは以下の通りです。

全体イメージ

自分の好きな形式で予定を複数回書いたテキストファイルを、プログラムに読み込ませると、Googleカレンダーに登録されます。

作業手順は、
1. Googleのクラウドサービス(Google Cloud Platform)で準備する

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

3. Google Colaboratoryで準備する

4. ChatGPTでプログラム作成する

5.Google Colaboratoryでプログラムを実行する

です。つまずきやすいのは、メインではないのですが3までかもしれません;
それぞれ、キャプチャ画像を多用して説明していきます。

あらかじめGoogleアカウントを持っていることを前提として書いています。
また、画像は2023/06/24時点のものとなりますのでご了承ください。

1. Googleのクラウドサービス(GCP:Google Cloud Platform)で準備する

ここで行うのは、プログラムを通してGoogleカレンダーを操作できるようにすることです。
私が解説するまでもなく、他の方も既に解説しています(参考)が、画像を多用し詳細に解説していきたいと思います。

1-1. Google Calendar APIを有効にする

GCP公式サイトにアクセスし、Google Calendar APIを有効にします。

クイックアクセスから、APIとサービスを選択

左のメニューから、ライブラリを選択

サーチバーに、「Google Calendar API」と入力し、Google Calendar APIを探す

Google Calendar APIを探す

有効にするを選択。これでGoogle Calendar APIが有効になり、Google Calenarにプログラムで予定を追加しやすくなります。

1-2. GCPサービスアカウントを作成する

GGCP画面の左上から、ナビゲーションメニューを選択し、IAMと管理から、サービスアカウントを選択します。


サービスアカウント画面で「サービスアカウントを作成」を選択する


続いて、サービスアカウント名を英語入力します。
任意ですがわかりやすい名前が良いです。今回はGoogleカレンダーに予定を登録するプログラムなので、Add_Scheduleと入れました。

サービスアカウント名を入力し、完了を選択

これでサービスアカウントが出来ました。アカウントのメールは後ほどGoogleカレンダーの共有設定で使うので、どこかにコピーしてキープしておいてください。

続いて、自分のGoogleアカウントということを認証するための認証キーを作成していきます。作成したサービスアカウントの右側にある「︙」を選択し、「鍵を管理」を選択します。

鍵を追加から、「新しい鍵を作成 」を選択します

「Add_Schedule」の秘密鍵の作成ダイアログが出ますので、キーのタイプがJSONになっていることを確認し、作成を選択します。

保存ダイアログが出ますので、ファイル名は後々のため、「credentials.json」
としておいてください。保存後に変更してもOKです。

これでGCPの設定は終わりです。

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

Googleカレンダーの設定を行っていきます。

Googleカレンダーにアクセスし、マイカレンダーから今回、プログラムで予定を登録するカレンダーを選び、横にある「︙」を選択します。

「設定を共有」を選択します。

「カレンダーの設定」部の、「特定のユーザーまたはグループと共有する」までスクロールし、「+ユーザーやグループを追加」を選択します

ここで、先程「1-2. GCPサービスアカウントを作成する」でキープしておいたアカウントのメールを貼り付け、送信を選択します。

新たなユーザーが追加されたので、このユーザーの権限を「変更および共有の管理権限」に変更します。

これでGoogleカレンダーの共有設定も完了です。

3. Google Colaboratoryで準備する

Google Colaboratory(Colab)は、無料でブラウザ上で Python を記述、実行できるツールです。つまりプログラムを実行するために、なにかソフトウェアをインストールしたりする必要がありません。
Colabにアクセスすると、以下のような画面になります。

プログラムはノートブックとして管理されます。
ファイルから、「ノートブックを新規作成」を選びましょう。

ノートブックが新規作成され、ここがプログラミングをする場所(環境)になります。
プログラムの名前を任意で付けておきましょう。
今回は「Add_Schedule.ipynb」としておきました。

ここまで出来たら、この環境に、以下の2つをアップロードしていきます
 ・自分の好きな形式で予定を複数回書いたテキストファイル「input.txt」
 ・1-2. GCPサービスアカウントを作成する で作成した「credentials.json」

まずは「input.txt」を作成します。
テキストエディタで、好きな形式で予定を複数作成していきます。
ここではWindowsに標準搭載されている「メモ帳」で例を書いていきます。
メモ帳を開き、以下のようにGoogleカレンダーに追加したい予定を書いていきます。
形式は、日時と予定が分かれば形式は自由です。ただし、全て同じ形式としましょう。今回は以下のように書きました。

つまり、以下の感じです。

2023/6/24,10:00,散歩
2023/6/26,10:00,散歩
2023/6/28,10:00,散歩

予定を書いたら、ファイルから名前を付けて保存します。
今回はファイル名は「input.txt」
文字コードは「UTF-8」

として保存してください。

保存したら、input.txtをColabにアップロードしていきます。
Colabの、左側のフォルダボタンを押すと、ファイルアップロードのボタンが表示されます。

input.txtと、ついでにcredentials.jsonもアップロードしましょう。
別の場所に保存した場合は、1つずつアップロードしてください。

アップロード時、警告が出る場合もありますが、OKで。

以下の通り、アップロードされました。


4. ChatGPTでプログラム作成する

さて、ようやく本題。
ChatGPTでColabに書くプログラムを作成していきます。
今回は念のため、GPT-4を使っています。
今まで行ったことと要望を、以下の通りChatGPTに書きました。

Google Colaboratoryで、Google calendarに指定日時の予定を追加するプログラムを作りたいと思っています。

あらかじめユーザー自身のサービス アカウントキー「credentials.json」を取得済みであり、OAuth 2.0フローを使用せずにAPIにアクセスしてください。

Google Colaboratoryには、「credentials.json」と「input.txt」をアップロード済みです。
input.txtには、utf-8で以下のような形式で、追加したい予定が書かれています。予定は開始時間のみ書かれ、1時間の予定です。 このデータを読んで、Googlec calendarに予定を追加するプログラムを書いてください。

[input.txt]
2023/6/24,10:00,散歩
2023/6/26,10:00,散歩
2023/6/28,10:00,散歩

すると、ChatGPTから以下の通り回答がきました。

以下にGoogle Calendar APIを使用して指定の予定を追加するプログラムを記述します。これはGoogle Colaboratory上で実行されます。

まず、必要なライブラリがインストールされていることを確認します。Google Colaboratoryには多くのライブラリが既にインストールされていますが、特定のライブラリが必要であれば、以下のように!pip installを使用してインストールすることができます。

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

次に以下のコードを使用してGoogle Calendar APIにアクセスし、指定の予定を追加します。

import datetime
import json
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build

# Service Account Keyのロード
with open('credentials.json') as f:
    creds_data = json.load(f)

creds = Credentials.from_service_account_info(creds_data)

# Google Calendar APIのserviceを作成
service = build('calendar', 'v3', credentials=creds)

# input.txtの読み込み
with open('input.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

# ファイルから予定を取得し、カレンダーに追加
for line in lines:
    date, start_time, event_name = line.strip().split(',')
    start_time = datetime.datetime.strptime(f"{date} {start_time}", "%Y/%m/%d %H:%M")
    end_time = start_time + datetime.timedelta(hours=1)  # 予定は1時間

    event = {
        'summary': event_name,
        'start': {
            'dateTime': start_time.isoformat(),
            'timeZone': 'Asia/Tokyo',  # タイムゾーンは適宜変更してください
        },
        'end': {
            'dateTime': end_time.isoformat(),
            'timeZone': 'Asia/Tokyo',
        },
    }

    event = service.events().insert(calendarId='primary', body=event).execute()
    print(f"Event created: {event['htmlLink']}")

このプログラムは、credentials.jsonからService Account Keyをロードし、Google Calendar APIを使用して新しい予定を追加します。

input.txtから行を読み込み、各行から予定の日時と名前を取得します。予定の終了時間は開始時間の1時間後とします。これらの情報からイベントを作成し、Googleカレンダーに挿入します。

calendarIdは'primary'と設定していますが、これは主要なカレンダーを表しています。特定のカレンダーにイベントを挿入する場合は、この値を適切なものに変更する必要があります。

また、このコードはタイムゾーンを'Asia/Tokyo'に設定しています。必要に応じて適切なタイムゾーンに変更してください。

最後に、予定の追加が成功したらその予定へのリンクを表示します。

というわけで、いい感じでプログラムを書いてくれました。

5.Google Colaboratoryでプログラムを実行する

追加のライブラリはおそらくいらないので、「4. ChatGPTでプログラム作成する」でChatGPTが生成してくれた2つ目のコードをコピーして、Colabに貼り付けます。
貼り付ける場所は、以下の、再生マークの右部分です。

ここに、ChatGPTが生成したコードを貼り付けます。
1点注意が必要です。最後から2行目にある、
event = service.events().insert(calendarId='primary', body=event).execute()
の、'primary'を自身のカレンダーID、基本的には自身のgmailアドレスに変更してください。

ここまで出来たら実行します。
実行するには、貼り付けた場所の左にある、再生マークを押します。

エラーなくうまく実行できると、下の方に
Event created: というものが3行でます。これは3件のイベントがうまく生成されたということです。

実際にGoogleカレンダーを見ると、予定が複数生成されています。
※自分の予定を無理やり画像で消したため、ちょっと画像上にピンクや緑が残っています

詳細を見ると以下の通り、しっかり1時間の予定で入っています。

6.Google Colaboratoryでプログラムエラーが出た場合の対応

今回は詳細はあまり書きませんが、Colabでプログラムエラーの場合、画面下の方にエラーメッセージが表示されます。

このメッセージを見ると、どこで問題が発生しているか、がわかるのですが、なかなか初心者にはすぐ解決するのが難しい場合が多いかと思います。

こういう場合はChatGPTに聞くのが一番です。
このエラーメッセージを全てコピーして、ChatGPTに聞きます。
例:

以下のエラーがでました。改善方法を教えてくれますか?
---------------------------------------------------------------------------
HttpError Traceback (most recent call last)
<ipython-input-4-bce221b34f7f> in <cell line: 20>()
35 }
36
---> 37 event = service.events().insert(calendarId='xxxx@gmail.com', body=event).execute()
38 print(f"Event created: {event['htmlLink']}")

1 frames
/usr/local/lib/python3.10/dist-packages/googleapiclient/http.py in execute(self, http, num_retries)
936 callback(resp)
937 if resp.status >= 300:
--> 938 raise HttpError(resp, content, uri=self.uri)
939 return self.postproc(resp, content)
940

HttpError: <HttpError 404 when requesting https://www.googleapis.com/calendar/v3/calendars/xxxx%40gmail.com/events?alt=json returned "Not Found". Details: "[{'domain': 'global', 'reason': 'notFound', 'message': 'Not Found'}]">

するとChatGPTが以下の通り回答をくれました。

エラーメッセージから、「Not Found」エラーが発生していることがわかります。このエラーは、指定したカレンダーID (xxxx@gmail.com)が存在しないか、サービスアカウントが該当するカレンダーにアクセスする権限がない場合に発生します。

以下の対策を試してみてください:カレンダーIDが正しいことを確認してください。カレンダーIDは通常、カレンダーを所有するGoogleアカウントのメールアドレスです。または、Googleカレンダーの設定ページから確認することもできます。
サービスアカウントがカレンダーに対して適切な権限を持っていることを確認してください。Googleカレンダーの設定から、サービスアカウントのメールアドレスに対して予定の作成と編集の権限を付与してみてください。サービスアカウントのメールアドレスは、Google Cloud ConsoleのIAM & Adminページから確認できます。これは、credentials.jsonファイル内の"client_email"フィールドにも記述されています。


これらの対策を試した後でも問題が解決しない場合は、再度お知らせください。

ということで、今回のエラーは
event = service.events().insert(calendarId='xxxx@gmail.com', body=event).execute()
と、自分のカレンダーIDというかgmailアドレスが間違っていることだとわかりました。

このように、エラーが出た場合はChatGPTを活用していくことで、素早く解決できる可能性があります。

まとめ

ChatGPTを用いたプログラミングで、複数回の予定をGoogleカレンダーに登録する方法を紹介しました。
ChatGPTにプログラミングしてもらうことで、自分の好きな形式で登録できるようになります。このあたりはいくらでも応用が聞きますので、いろいろ試してみてください。

今回ご紹介したプログラムを流用すれば、ChatGPTを使わずとも複数回の予定をGoogleカレンダーに登録できますので、GPT-4を使われていない方はためしてみてくださいね。


この記事が気に入ったらサポートをしてみませんか?