Skip to content

Instantly share code, notes, and snippets.

@xeno14
Created October 29, 2020 06:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xeno14/4850b2086d43dfb172f37a6315a13bb0 to your computer and use it in GitHub Desktop.
Save xeno14/4850b2086d43dfb172f37a6315a13bb0 to your computer and use it in GitHub Desktop.
DMM英会話の予定をカレンダーに追加するGoogle Apps Script 2020年10月版
// 2020年10月版
function DMMCalenderFromGmail() {
// メール本文のパース
function parseBody(body) {
// 開始時間と先生の名前の取得
var matched = body.match(/様、(.*)の(.*)とのレッスン予約が完了しました./);
if (matched.length != 3) {
Logger.log("parse error at teacher and start time");
return null;
}
var teacher = matched[2];
var startDate = new Date(matched[1]);
var endDate = new Date(startDate.getTime() + 25 * 60 * 1000);
// レッスンのURLの取得
var matched = body.match(/(https:\/\/eikaiwa.dmm.com\/app\/lesson-booking\/[^"]*)/);
if (matched.length != 2) {
Logger.log("parse error at link");
return null;
}
var url = matched[1];
return {
"teacher": teacher,
"start": startDate,
"end": endDate,
"title": "【DMM英会話】" + teacher,
"url": url,
};
}
// レッスン予約メールの取得
var threads = GmailApp.search("subject:レッスン予約 from:noreply@eikaiwa.dmm.com ");
// 最近の10件のみカレンダーに追加する対象とする
var numThreads = Math.min(threads.length, 10);
// メールのメッセージ
var messages = GmailApp.getMessagesForThreads(threads.slice(0, numThreads));
// カレンダー
var calender = CalendarApp.getDefaultCalendar();
for (var i=0; i<messages.length; i++) {
// メール本文のパース
var msg = messages[i][0];
var body = msg.getBody();
var contents = parseBody(body);
// 同名の予定が存在していなければ予定を作成する
var alreadyCreated = calender.getEvents(contents["start"], contents["end"], {search: contents["title"]});
if (alreadyCreated.length == 0) {
var event = calender.createEvent(contents["title"], contents["start"], contents["end"]);
// 5分前のポップアップ通知
event.addPopupReminder(5);
// レッスンのURLを追加
event.setDescription(contents["url"]);
Logger.log("Created event: " + contents["title"] + " at " + contents["start"]);
} else {
Logger.log("Event already exists: " + contents["title"] + " at " + contents["start"]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment