【Python】バイトのシフト時間を自動でGoogleカレンダーに追加する
「バイトのシフト時間をいちいちカレンダーに登録するのがめんどくさい」
「登録する時に時間を間違って入れてしまい、大変な目にあった」
そんな煩わしさを解消させるべく、自動カレンダー登録システムを構築しました。
実行環境
- Python 3.11.6
- macOS 14.1.2
プログラムの概要
プログラムを作成した経緯
半月に一度ジョブカンというシフトアプリから時間を確認して、Googleカレンダーに入れていたが、めんどくさくなったため自動化できないかと考えた。
実現させたかった機能
- 自動で予定をカレンダーに書き込む
- プログラムの実行をメールで知らせる
実行の様子
プログラム詳細
「jobcan」という名前でgithubにまとめてある。
機能
- 現在の月の11日から、2ヶ月後の10日までのシフトの時間をジョブカンから取得する。(例えば、現在3/15であれば、3/11〜5/10までのシフトを追加する。)
- 取得した時間をgoogle calendarへ追加する。
- 同じ予定は書き込まないようにする。
- 一定期間で自動実行するようにする。
- プログラムを実行したら、確認メールを送る。
ファイル構成と関数
- README.md
- 実行の手順を記述してある。
- google_calendar.py
- google calendarに追加する関数の処理が記述してある。
- 関数:
- check_duplicate_events:カレンダー書き込みの際に、同じ予定があるかチェックする関数
- add_event_to_calendar:Googleカレンダーにイベントを追加する関数
- calc_date:ジョブカンから引っ張って来る期間の計算をする。
- jobcan.py
- jobcanからシフト情報を取得するための処理が記述してある。
- 関数:
- login_to_jobcan:ジョブカンにログインしてセッションを確立する関数
- get_shift_info:ジョブカンからシフト情報を取得する関数
- key.py
- jobcanにログインするためのパスワード、google calendarへの書き込み情報、gmail addressの情報が記述してある。
# ジョブカンへのログイン情報
jobcan_companyname = "勤怠会社ID"
jobcan_username = "メールアドレスまたはスタッフコード"
jobcan_password = "パスワード"
# Googleカレンダーへの書き込み情報
calendar_id = "カレンダーid"
service_account_file = "/jobcan/keyfile.jsonへのパス"
#gmail address
account = "送り先のgmailアドレス"
password = "gmailパスワード"
send_address = "送り主のgmailアドレス"
- main.py
- メイン関数が記述してある。
- send_mail.py
- メールに関しての処理が記述してある。
- 関数:
- send_email:メール送信のメインの処理を行う関数
- make_mime_text:件名、送信先アドレス、本文を渡す関数
- send_gmail:smtp経由でメール送信する関数
- keyfile.json
- google calendarの認証情報が記述してある。
処理の流れ
- jobcan.login_to_jobcanでジョブカンへログインする。
- セッション情報を得たら、google_calendar.calc_dateでジョブカンから得る期間を計算する。
- jobcan.get_shift_infoでシフト情報を得る。
- 得たシフト時間のデータをgoogle calendarへ書き込めるように整形する。
- google calendarにすでに同じ予定がないかgoogle_calendar.check_duplicate_eventsでチェックする。
- なければgoogle calendarへ書き込む。
- send_mail.send_emailでメールを送信する。
実行の手順
1 githubからファイルをダウンロードする
2 適切な位置にファイルを配置する
3 google cloudで認証情報を取得する(こちらのサイトを参考に)
4 3で作成した認証ファイルの名前を、keyfile.jsonとする
5 key.pyを埋める
6 main.pyのevent_dataを編集して、google calendarの予定名を入れる
7 main.pyを実行し、動作確認する
参考にさせていただいたサイト
- google calendarの設定方法
https://dev.classmethod.jp/articles/google-calendar-api-create-schedule/
- cronの設定方法
https://fuyutsuki.net/mac-cron-automater/
- pythonでgmailを送る方法
https://note.com/noa813/n/nde0116fcb03f