参加予約したイベントを忘れないために、Googleカレンダーと自動連携するスクリプトを作成しました

作成者: @吉野美那子

作成日: 2022年3月11日

最終更新日: 2022年3月13日


やりたいこと

自分が参加するRUNTEQのイベントを自動でGoogleカレンダーに反映させたい。

どうやってやるか

GAS(Google Apps Script)で、定期的にGmailをチェックする。スターのついていないRUNTEQイベントの参加予約完了メールがあれば、メール本文をパースして、イベントの概要と日時を取得し、Googleカレンダーに予定を登録する。予定を登録したらそのメールにスターをつけて終了。

参考にしたブログ

https://blog.shipweb.jp/archives/680

詳しいやりかた

  1. Googleドライブから新しい「Google Apps Script」プロジェクトを生成する。

  2. コード.gsに次のコードを入力。

    function runteqmailCheck(){
    	
    	//指定したタイトルのメール最新10件を取得
      const SEARCH_TERM = 'subject:【RUNTEQ】イベントへの参加予約が完了しました';
      const threads = GmailApp.search(SEARCH_TERM, 0, 10);
    
      threads.forEach(thread =>{
        const messages = thread.getMessages();
        messages.forEach(message =>{
    
          //メールにスターがついていない場合に以下の処理を実行
          if(!message.isStarred()){
            let plainBody = message.getPlainBody();
          
            //イベントの概要の取得
            let startIndex = plainBody.indexOf("当日のご参加を楽しみにお待ちしております!") + 25;
            let endIndex = plainBody.indexOf("-----------------------");
            const description = plainBody.substring( startIndex, endIndex );
          
            //イベントのタイトルの取得
            const title = description.substring( 0, description.indexOf("日時"));
          
            //イベントの日時の取得
            let datetext = description.substr(description.indexOf("日時")+4, 26);
            let year = Number(datetext.substr(0, 4));
            let month = Number(datetext.substr(5, 2));
            let day = Number(datetext.substr(8, 2));
            let starthour = Number(datetext.substr(15,2));
            let startminute = Number(datetext.substr(18,2));
            let endhour = Number(datetext.substr(21,2));
            let endminute = Number(datetext.substr(24,2));
    
            //イベントの日時をGoogleカレンダーに書き込みできるように変換
            const startTime = new Date(year, month - 1, day, starthour, startminute);
            const endTime = new Date(year, month - 1 , day, endhour, endminute);
    
            //Googleカレンダーへ書き込み
            let calendar = CalendarApp.getDefaultCalendar();
            let options = {
            description: description
            }
            calendar.createEvent(title, startTime, endTime, options);
    
            //メールにスターをつける
            message.star();
          }
        })
      })
    }
    
  3. 以下、参考にしたブログ(https://blog.shipweb.jp/archives/680)と同様に設定を進める。まず、スクリプトのタイムゾーンを日本時間に変更する(詳細は割愛)。

  4. プロジェクトを保存して、一度実行ボタンを押す。「承認が必要です」というダイアログが出るので、諸々の権限を承認する。もう一度実行ボタンを押して、Googleカレンダーに予定が反映されていたら成功。

    スクリーンショット 2022-03-11 22.41.37.png

  5. GASを定期的に実行するためのトリガーを設定すれば、あなたは予定の手動管理から解放されます!

備考

十分に動作テストしたわけではないので、コピーして使う場合は自己責任でお願いします…

参加予約完了メールのフォーマットが変わると使えなくなるので注意。