はじめに
- 最近オンライン英会話にハマっており、毎日レッスンを受けています。日によって受講時間が異なるため、毎回予約完了後に手入力でGoogleカレンダーに登録していましたが、面倒くさい…
- 予約完了メールが毎回送られてくるので、それをトリガーに登録できれば完全に自動化できそうです。ということで先人の知恵を拝借しつつ初めてのGoogleAppScriptに挑戦してみました
- こちらの記事を参考に作成しました、ありがとうございます→DMM英会話の予定をGoogleカレンダーに自動登録する方法
コード
const CRITERIA = "from:noreply@notify.qqeng.com subject:【QQEnglish】レッスン予約完了のお知らせ is:unread ";
function main() {
eachMessage(CRITERIA, function (message) {
const cal = CalendarApp.getDefaultCalendar();
const body = message.getBody();
const subject = message.getSubject()
const [startDateString] = subject.match(/\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}/g)
const curriculum = body.match(/(?<=カリキュラム: )(.*)/g);
Logger.log(curriculum)
const title = `QQ/${curriculum}`;
const startTime = new Date(startDateString);
const endTime = new Date(startTime.getTime() + 30 * 60000);
cal.createEvent(title, startTime, endTime);
});
}
function eachMessage(CRITERIA, callback) {
GmailApp.search(CRITERIA).forEach(function(thread) {
thread.getMessages().forEach(function(message) {
callback(message);
message.markRead();
});
});
}
処理の流れ
- 条件にあてはまるメールを抽出(送信元アドレス、タイトル、未読である)
- メールタイトルから受講日時を正規表現で抽出
- メール本文からカリキュラム名を正規表現で抽出
- GoogleカレンダーAPIのcreateEvent関数でカレンダーに登録
- カレンダー登録済みメールをmarkRead関数で既読にする
GmailMessageクラスについて
- 今回は3つの関数を使用しました
関数名 | 説明 |
---|---|
getSubject() | メールのSubject(タイトル)を取得 |
getBody() | メールのBody(中身)を取得 |
markRead() | メールを既読にする |
- 使用できる関数の一覧についてはこちらのGoogleのページにて確認可能です
トリガーの設定方法
- 左のメニューからトリガー→トリガーを追加→分ベースのタイマー→15分おき(時間はお好みで)
- 実行時間、実行回数、トリガー数の制限はありますが、今のところ15分おきの実行で問題なく動いています
おわりに
- GoogleAppScript、お手軽で楽しいですね!個人開発でもっと活用してみたいと思います
- このコードを流用することであらゆる予約メールをGoogleカレンダーに登録することができると思いますので、ぜひ参考にしてください
- (ちなみに)QQEnglishのカリキュラムではカランレッスンとR.E.M.Sを受講していますが、筋トレのような爽快感を得られておすすめです^^