2024年5月22日

【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の認証情報が記述してある。

処理の流れ

  1. jobcan.login_to_jobcanでジョブカンへログインする。
  2. セッション情報を得たら、google_calendar.calc_dateでジョブカンから得る期間を計算する。
  3. jobcan.get_shift_infoでシフト情報を得る。
  4. 得たシフト時間のデータをgoogle calendarへ書き込めるように整形する。
  5. google calendarにすでに同じ予定がないかgoogle_calendar.check_duplicate_eventsでチェックする。
  6. なければgoogle calendarへ書き込む。
  7. 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