Googleカレンダーに時間割を登録するGUIアプリを作った

概要

講義の予定をGoogleカレンダーに自動的に追加するようなGUIアプリケーションを作りたい!

(半年ぐらい前に書いたプログラムの修正版といったところ…)

すでにひな型があったのでCUIからGUIにするのに1日ぐらいで終わった。

具体的なプログラムのイメージ

検索

検索キーは講義番号とする。

スクレイピングシラバスから講義情報を取得してうまく表示させたい。

予定データの入出力

登録する講義情報をGUIに入力し、Googleカレンダーの予定データの形式に変換したい。

予定データの登録

入力された予定データをGoogleカレンダーに登録する。隔週ごとに登録できるとなお良い。

予定データの削除

現在登録されている予定を削除する機能。登録するより難しい気がする… ->うまく実装できる気がしない…

曜日振替

(たまに曜日振替がある…)けど気にしない

マニュアル登録

保留その2

完成したものがこちら

予定を追加したい講義の講義番号から検索をする。 Googleカレンダーに予定を追加ボタンを押すと、表示されている時刻に予定が追加される。一度に予定が一気に登録されるので、間違えると消すのはかなり面倒くさいので注意 ちゃんと予定が追加されると、こんな感じに表示される。

結構便利そう。.exeファイルにしたので、Githubからダウンロードして以下の設定をすれば誰でも使えるはずです。(Microsoft Defenderにはじかれる可能性もありそう)

github.com

zipファイルでダウンロードするのが楽だと思います。

GASの認証について

サービスアカウントと呼ばれるアカウントを発行してGoogleカレンダーにアクセスできるようにすれば、このプログラムが機能するようになります。サービスアカウントにまつわる認証情報は機密情報なので、ネットなどに公開するのはNGです。自己責任でよろしくお願いします。

サービスアカウントを使って認証する

認証ファイルを作成する手順は以下のサイトを参考にした。

Google Cloud Platform の鍵ファイルの作成 - IBM Documentation

Google Cloud プラットフォーム

Googleクラウドにアクセスする。

プロジェクトの選択->新しいプロジェクトをクリック

適当なプロジェクト名をつけてプロジェクトを作成

初めの画面に戻る。IAMと管理をクリック。

サービスアカウントをクリック。

サービスアカウントを作成をクリック。

適当に名前を付けて作成。

鍵を管理をクリック。

ファイル名をcredentials.jsonとして保存する。

もう一度初めの画面へ戻る。APIとサービスをクリックし、画面が遷移したら、APIとサービスを有効にするをクリック。

APIの検索画面からカレンダーを検索。

Google Calendar APIを有効化する。

今度はGoogleカレンダーを開く。

Google カレンダーを共有するには?公開範囲の制限や詳細の非表示・権限付与方法を紹介|ヨシヅミ-吉積情報株式会社|Google 認定プレミアパートナーより画像を引用

ユーザーを追加するを押し、「予定の変更」権限で、作成したサービスアカウントを登録する。

あと、タイムゾーンがずれている場合は日本標準時に変更してください。

認証ファイルを所定の位置に移動する

全体のファイル構成はこんな感じ

MySyllabus
├── Pipfile //ライブラリ管理
├── Pipfile.lock
├── README.md
├── config //学期と時限の設定ファイル
│   ├── period.csv
│   └── semester.csv
├── env //ユーザー設定フォルダ
│   ├── .env //メールアドレス
│   └── credentials.json //認証ファイル
└── src
    ├── MySyllabus.exe //実行ファイル
    ├── MySyllabus.ipynb
    ├── MySyllabus.py //ソースコード
    ├── MySyllabus.spec
    └── build

設定の必要があるのはsemester.csv, .env, credentials.jsonの3つだけ。

credentials.jsonはサービスアカウントを作成したときにダウンロードしたファイルで、envディレクトリの直下に保存する。

.envファイルには、Googleカレンダーと紐づいているメールアドレスを入力する必要がある。

semester.csvは学期の開始日と終了日が入力されているだけ。年に一回更新すればOK。

学期,開始,終了
1,2024/4/8,2024/6/6
2,2024/6/7,2024/8/5
3,2024/10/1,2024/11/28
4,2024/11/29,2024/2/7