これ作ったあとに公式が既に対応していたり、他の方が既に作っていることに気付いたのですが、せっかくなので公開しておきます。
※5分前にアラームを鳴らす部分は公式サービスでは対応していなかったのでそこだけオリジナル部分です。
たったの20行程度のGoogle Apps Scriptのコードで実現できます。
Contents
レアジョブ英会話のレッスン予約をGoogleカレンダーに連携する方法
全体の手順は以下のようになります。
さくさくっと進めれば全体でも5分程度で完了します。
- 新規GAS(Google Apps Script)を作成する
- GASのソースをコピペする
- 一度実行してGmailとCalendarを認証する
- スケジュール設定を行う
今回作成するGASの処理内容ですが、大まかに以下のような処理になっています。
- 未読のレアジョブ予約メールを取得
- 件名から正規表現で予約情報を抜き出す
- 予約情報を元にカレンダーに予定を作成
- アラームを5分前に鳴るようにセット
- 処理が完了した予約メールを既読に変更
1.新規GAS(Google Apps Script)を作成する
GASはGoogle Drive上から新規作成が可能です。
以下の記事のGAS部分を読むと実際に新規GASの作成方法がわかります。
2.GASのソースをコピペ
function checkReservation() {
//Get reservation mail which unread
var criteria = 'レッスン予約完了 from:donotreply@rarejob.com is:unread';
GmailApp.search(criteria).forEach(function(threads) {
threads.getMessages().forEach(function(message){
createEvent(message);
message.markRead();
})
})
}
function createEvent(message) {
//Replace not necessary word.
var subject = message.getSubject().replace(/午前/g,"");
//Get the information for create calendar event.
var searchword = new RegExp('\\s(\\d*/\\d*/\\d*)\\s(\\d*:\\d*)\\s-\\s(\\d*:\\d*)');
var [words,date,start,end] = subject.match(searchword);
//Create google calendar object and create event.
var calendar = CalendarApp.getDefaultCalendar();
var event = calendar.createEvent("レアジョブ英会話レッスン", new Date(date + " " + start), new Date(date + " " + end));
//Set alert will popup 5 minutes before.
event.addPopupReminder(5);
}
3.一度実行してGmailとCalendarを認証する
画像赤枠で囲っている部分、関数の選択は「checkReservation」を選択し、左側の三角の実行ボタンをクリックして実行します。
以下の画像が表示されるので「許可を確認」をクリックします。
警告画面が表示されるので「詳細」をクリックします。
詳細をクリックして出てきた表示内の「GAS名(安全ではないページ)に移動」をクリックします。
するとアカウントの選択画面が表示されるので利用するGoogleアカウントを選択してください。
利用を許可するアプリの一覧が表示されるので、メールとカレンダーが表示されていることを確認の上、「許可」をクリックしてください。
※画像だとスプレッドシートも連携されていますが、ここは不要です。
ここでようやくGASの処理が実行されます。
4.スケジュール設定を行う
時計マークをクリックして自動実行のスケジュール設定画面を開く。
好みの時間帯で実行されるように指定する。
画像の設定だと、10分毎に実行されます。
以上で設定自体は完了です。
ソースの解説
1.未読のレアジョブ予約メールを取得
//Get reservation mail which unread
var criteria = 'レッスン予約完了 from:donotreply@rarejob.com is:unread';
GmailApp.search(criteria).forEach(function(threads) {
threads.getMessages().forEach(function(message){
createEvent(message);
GmailApp.search(“検索条件”)でGmail上のメールの検索が行なうことができます。
今回の検索条件は以下のように指定しています。
- メールに「レッスン予約完了」という文字を含む
- 送信者が「donotreply@rarejob.com」
- 未読
これをcriteriaに指定してGmailApp.searchで検索をかけています。
続いての「.forEach」は検索結果をループで処理することを指しています。
GmailAppで取得できるデータの構造上、2回ループを回すことでようやくメールの件名や本文などが取得できます。
2.件名から正規表現で予約情報を抜き出す
//Replace not necessary word.
var subject = message.getSubject().replace(/午前/g,"");
//Get the information for create calendar event.
var searchword = new RegExp('\\s(\\d*/\\d*/\\d*)\\s(\\d*:\\d*)\\s-\\s(\\d*:\\d*)');
var [words,date,start,end] = subject.match(searchword);
まず、午前中の時間帯の予約の場合、「午前」という文字が入るため、その文字を切り取っています。
※24時間表記なのになぜか午前だけ「午前」とつく謎仕様。。
正規表現の検索条件を作成して、それを配列の形で受け取っています。
()で囲まれた3つの文字列と全体の文字列で4つ結果が返ってくるので配列も4つ指定して受け取っています。
例えば、件名が「【レアジョブ英会話】レッスン予約完了(レッスンルーム) 2018/10/22 18:30 – 18:55」だった場合、各項目には以下の値が入ります。
- words:2018/10/22 18:30 – 18:55
- date:2018/10/22
- start:18:30
- end:18:55
3.予約情報を元にカレンダーの予定を作成
//Create google calendar object and create event.
var calendar = CalendarApp.getDefaultCalendar();
var event = calendar.createEvent("レアジョブ英会話レッスン", new Date(date + " " + start), new Date(date + " " + end));
予定作成時に指定する項目は「タイトル」「開始時刻」「終了時刻」の3つです。
オプションを指定して作成する方法もありますが、今回はシンプルに上記の3つだけを使用しています。
開始時刻と終了時刻は先ほど件名から正規表現で取得した情報を元にセットしています。
4.5分前にアラームが鳴るようにセット
//Set alert will popup 5 minutes before.
event.addPopupReminder(5);
作成した予定に対してポップアップのリマインダーをセットしています。
ここでは5分前にアラームが鳴るようにしていますが、数値を変えれば10分前や3分前に鳴らすことも可能です。
5.処理が完了した予約メールを既読に変更
message.markRead();
この部分で予定を作成したメールを既読に変更しています。
まとめ
相変わらずGASは簡単なソースで実用的に使えるから良いですね。
今回のレアジョブ英会話のカレンダー連携も公式では対応できていないアラーム時刻の設定も行えるのでそれをやりたかったという人には使っていただければと思います。
また、本ソースを応用することでDMMなど他のオンライン英会話や予約関連のメールも自動連携が可能です。
正規表現の部分で件名や本文から予約時間が抜き出せれば後の部分はほぼ使い回しできるはずです。
何か質問があればコメントかTwitterなどでDMをいただければ回答します。