勤務報告メールから Google Calendar に予定を登録する

部活の大会が片付いたので久々に短いスクリプトを書いた。

  • 現状:バイト先にて自分の次回勤務日を毎回メーリスでお知らせするのだが、記憶力がアレなせいで翌日には設定した日時を完全に忘却している
  • 目標:Gmail で当該メールを受信するようにし、それをパースして Google Calendar に自動で登録するスクリプトを書く
  • 手順:職場のメールをGmail にインポートしてメーリスを受信できるようにし、さらに以下のような Google Apps Script (GAS) を設置した。1分おきに実行するようスケジュールしたが、処理済みのメールにラベルを付けることで新着メールのみに反応するよう工夫してある。
function main() {
    var strTerms = 'from:WalkingTrashbox@myoffice.jp';
    var myThreads = GmailApp.search(strTerms, 0, 1);
    var labels = myThreads[0].getLabels();
    for (var i = 0; i < labels.length; i++){
        if (labels[i].getName() === "myoffice/report"){
            return;
        }
    }
    myThreads[0].addLabel(GmailApp.getUserLabelByName("myoffice/report"));
    var myMessage = GmailApp.getMessagesForThreads(myThreads);
    var content = myMessage[0][0].getPlainBody();
    var dateArray = content.match(/次回の勤務は、(\d+)\/(\d+) (\d+):(\d+)/);
    var now = new Date()
    var startDate = new Date(now.getFullYear(), dateArray[1]-1, dateArray[2], dateArray[3], dateArray[4]);
    if (now > startDate){
        startDate.setFullYear(now.getFullYear + 1);
    }
    var endDate = new Date(startDate.getTime() + 60 * 60 * 1000);
    var gCal = CalendarApp.getCalendarsByName("Part time");
    Logger.log(gCal[0].getName());
    gCal[0].createEvent('バイト', startDate, endDate);
}