DMM英会話のレッスン予約確認メールからGoogleカレンダーに自動登録する
DMM英会話始めました! 毎日レッスンできるので楽しいですね。予約も取れますし。しかし唯一不満な点は、予約した内容をカレンダーに入れる機能が提供されていないことです。
そんなわけでこちらのサイトを参考に、簡略化してカスタマイズしました。
blog.shotarok.com
この技が使えるのは次の人です。
- レッスン確認のメールをGmailで受信している
- Googleカレンダーを使っている
- PCが使える
仕組み
レッスン予約したときにDMM英会話から届く「レッスン予約」というメールが未読の中にあると、スクリプトが発動して、あらかじめ指定したカレンダーに予定が自動登録されるようにします。
ではさっそく内容を説明しますよ〜!
作り方
Googleドライブで新規スクリプトプロジェクトを作る
「新規」→「その他」→「Google Apps Script」を選びます。
Google Apps Script画面が表示されます。
ここに、次のコードをコピペします。
一部、
GASでDMM英会話の予約メールから自動的にカレンダーに登録 | shotarok's Tech Blog
さんのソースを拝借しました!
/** * 検索結果のそれぞれのメールに対して与えられた処理を行う * * @param {string} criteria 検索条件。Gmailで絞り込むのと同等の文字列 * @param {function} callback 1メールに対して行う処理。callback関数への引数にはGmailMessageが渡される */ function eachMessage(criteria, callback) { GmailApp.search(criteria).forEach(function(thread) { thread.getMessages().forEach(callback); }); } /** * 検索結果の未読メールに対して与えられた処理を行た後、既読にする * * @param {string} criteria 検索条件。Gmailで絞り込むのと同等の文字列 * @param {function} callback 1メールに対して行う処理。callback関数への引数にはGmailMessageが渡される */ function eachUnreadMessage(criteria, callback) { GmailApp.search(criteria).forEach(function(thread) { thread.getMessages().forEach(function (message) { if (message.isUnread()) { callback(message); message.markRead(); } }); }); } /** * デフォルトのカレンダーにイベントを登録する * * @param {string} title イベントのタイトル * @param {Date} startDate イベントが始まる時刻 * @param {Date} endDate イベントが終わる時刻 */ function createEvent(title, startDate, endDate, event) { if (!(title && startDate && endDate)) { return event; } // 指定したカレンダーにイベントを登録 var cal = CalendarApp.getCalendarById('☆自分のカレンダーID☆'); var event = cal.createEvent(title, startDate, endDate); Logger.log('Event ID: ' + event.getTitle() + '[' + startDate + '~' + endDate + '] is created'); return event; } function myFunction() { // 予約確認メールの送信者とメール件名 var criteria = "from:noreply@eikaiwa.dmm.com レッスン予約"; eachUnreadMessage(criteria, function (message) { var body = message.getBody(); // 「2020/06/27 21:00のTonyとのレッスン予約が完了しました」から抜き出します var [matched, year, month, day, sh, sm, teacher] = /様、(\d+)\/(\d\d)\/(\d\d) (\d\d):(\d\d)の(\w+)との/.exec(body); var sdate = new Date(year, month-1, day, sh, sm); var edate = new Date(sdate.getTime() + 30 * 60000); var event = createEvent("DMM英会話:" + teacher, sdate, edate, 'https://eikaiwa.dmm.com/'); // レッスン15分前にポップアップアラートを表示 event.addPopupReminder(15); } ); }
DMM英会話でレッスンを予約すると、その直後に「レッスン予約」という件名で「レッスンの予約が完了しました」というメールが届くはずです。
それからカレンダーのイベントを作りますよ。
登録するカレンダーは、特定のカレンダーに決めてください。
私はGoogleカレンダーに「DMM英会話」というカレンダーを作りました。
そのカレンダーを右クリックして「設定と共有」を選択すると、カレンダーの設定画面になるので、
下にスクロールして、「カレンダーの統合」の所にある「カレンダーID」をコピペします。
これを、先ほどのコードの中の「'☆自分のカレンダーID☆'」と置き換えてくださいね。
そして、スクリプトを適当な名前で保存します。
承認
すると、権限の承認を求めるメッセージが出ます。
「許可を確認」をクリックして、自分のアカウントを選びます。
すると、「このアプリは確認されていません」というエラーメッセージが出るんですけど…
ここで、左側にある「詳細」というリンクをクリックします。
(右側の青いボタンを押さないように!)
すると、下に「(プロジェクト名)(安全でないページ)に移動」というリンクがあるのでそれをクリックします。
アカウントに権限を許可するか確認されるので、「許可」します。
実行してみる
未読のレッスン予約メールを用意して、試しに動くか確認してみてください。
メニューバーの「再生」みたいな記号をクリックすると実行されます。
(もしくは、メニューから「実行」→「関数を実行」→「myFunction」)
うまく動きましたか?
「DMM英会話: Tony」というようなイベントが、指定したカレンダーに、指定どおりの日時にできていれば成功です。
予約の15分前にポップアップで通知するように設定されています。
(そこは自由にカスタマイズしてください)
自動でトリガーされるようにする
DMM英会話からメールが届いたときに起動されるようにしたいので、このプログラムのトリガーを登録します。
「編集」→ 「現在のプログラムのトリガー」を選択すると、トリガー画面になります。
右下の「トリガーを追加」をクリックすると、トリガー設定画面が表示されるので
実行する関数: myFunction
イベントのソースを選択: 時間主導型
時間ベースのトリガーのタイプを選択: 分ベースのタイマー
時間の間隔を選択: 1分(好きな時間に設定してください)
これで完成です!
予約したらカレンダーに登録されるはずですが、どうでしょうか…?
ちなみに
iPhoneの人は、iOSとGoogleカレンダーを連携させると幸せになれます!
support.google.com
ポップアップ通知も来ますよ。