参加予約したイベントを忘れないために、Googleカレンダーと自動連携するスクリプトを作成しました
作成者: @吉野美那子
作成日: 2022年3月11日
最終更新日: 2022年3月13日
自分が参加するRUNTEQのイベントを自動でGoogleカレンダーに反映させたい。
GAS(Google Apps Script)で、定期的にGmailをチェックする。スターのついていないRUNTEQイベントの参加予約完了メールがあれば、メール本文をパースして、イベントの概要と日時を取得し、Googleカレンダーに予定を登録する。予定を登録したらそのメールにスターをつけて終了。
https://blog.shipweb.jp/archives/680
Googleドライブから新しい「Google Apps Script」プロジェクトを生成する。
コード.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();
}
})
})
}
以下、参考にしたブログ(https://blog.shipweb.jp/archives/680)と同様に設定を進める。まず、スクリプトのタイムゾーンを日本時間に変更する(詳細は割愛)。
プロジェクトを保存して、一度実行ボタンを押す。「承認が必要です」というダイアログが出るので、諸々の権限を承認する。もう一度実行ボタンを押して、Googleカレンダーに予定が反映されていたら成功。
GASを定期的に実行するためのトリガーを設定すれば、あなたは予定の手動管理から解放されます!
十分に動作テストしたわけではないので、コピーして使う場合は自己責任でお願いします…
参加予約完了メールのフォーマットが変わると使えなくなるので注意。