|
function setMyGoogleCalendar(){ |
|
var gmailThread = specifyMailFromFeelcycle(); |
|
var lessonList = parsePlainBody(gmailThread); |
|
createGoogleCalendarEvent(lessonList); |
|
removeGoogleCalendarEvent(lessonList); |
|
} |
|
|
|
function specifyMailFromFeelcycle(){ |
|
var gmailThreads = GmailApp.search("from:[email protected] FEELCYCLE ご予約登録"); |
|
// Get the registering threads |
|
var registeringThread = gmailThreads[0]; |
|
|
|
gmailThreads = GmailApp.search("from:[email protected] FEELCYCLE ご予約キャンセル"); |
|
// Get cancelling threads |
|
var cancelingThread = gmailThreads[0]; |
|
var thread = new Object(); |
|
thread.registeringThread = registeringThread; |
|
thread.cancelingThread = cancelingThread; |
|
return thread; |
|
} |
|
|
|
function parsePlainBody(gmailThread){ |
|
if( gmailThread.registeringThread === null || |
|
gmailThread.registeringThread === undefined || |
|
gmailThread.registeringThread === "") return Logger.log("Please check \"gmailThread.registeringThread\""); |
|
var registeringMessages = gmailThread.registeringThread.getMessages(); |
|
var registeringLessonList = []; |
|
setMessageToList(registeringMessages, registeringLessonList); |
|
if( gmailThread.cancelingThread === null || |
|
gmailThread.cancelingThread === undefined || |
|
gmailThread.cancelingThread === "") return; |
|
var cancelingMessages = gmailThread.cancelingThread.getMessages(); |
|
var cancelingLessonList = []; |
|
setMessageToList(cancelingMessages, cancelingLessonList); |
|
var lessonList = { |
|
registeringLessonList: registeringLessonList, |
|
cancelingLessonList: cancelingLessonList |
|
} |
|
Logger.log(JSON.stringify(lessonList, " ")); |
|
return lessonList; |
|
} |
|
|
|
function setMessageToList(messages, list){ |
|
messages.forEach(function(value, index){ |
|
var fsLesson = new Object(); |
|
var plainBody = value.getBody(); |
|
// var result = RegExp.prototype.exec() |
|
// result[0] = The full string of characters matched |
|
// result[1] = The parenthesized substring matches, if any. The number of possible parenthesized substrings is unlimited. |
|
// See also: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec |
|
fsLesson.date = /日時: (.*)/.exec(plainBody)[1].replace(/(\d{4})年(\d{1,2})月(\d{1,2})日(.*)(\d{2}):(\d{2})(.*)?(\d{2}):(\d{2})/, '$1-$2-$3-$5-$6'); |
|
fsLesson.store = /店舗: (.*)/.exec(plainBody)[1]; |
|
fsLesson.lessonTitle = /レッスン: (.*)/.exec(plainBody)[1]; |
|
fsLesson.instructor = /インストラクター: (.*)/.exec(plainBody)[1]; |
|
fsLesson.bikeNo = /バイクナンバー:(.*)/.exec(plainBody)[1] |
|
list[index] = fsLesson; |
|
}); |
|
} |
|
|
|
function createGoogleCalendarEvent(lessonList){ |
|
if(lessonList.registeringLessonList === null || |
|
lessonList.registeringLessonList === undefined || |
|
lessonList.registeringLessonList === "") return Logger.log("Please check \"lessonList.registeringLessonList\""); |
|
lessonList.registeringLessonList.forEach(function(lesson, index){ |
|
// Lesson time |
|
var minutes = 45; |
|
var lessonTitle = lesson.lessonTitle + " " + lesson.instructor + " #" + lesson.bikeNo + " " + lesson.store; |
|
var dateList = lesson.date.split("-"); |
|
var lessonDate = new Date(dateList[0], dateList[1]-1, dateList[2], dateList[3], dateList[4], 0); |
|
var searchResult = CalendarApp.getDefaultCalendar().getEvents(lessonDate, |
|
new Date(lessonDate.getTime() + minutes * 60000), |
|
{search: lessonTitle}); |
|
Logger.log(searchResult.length); |
|
if(searchResult.length === 0){ |
|
var successEvent = CalendarApp.getDefaultCalendar().createEvent(lessonTitle, |
|
lessonDate, |
|
new Date(lessonDate.getTime() + minutes * 60000)); |
|
Logger.log("Success to create event! EventId: " + successEvent.getId() + " EventTitle: " + successEvent.getTitle()); |
|
} |
|
}); |
|
} |
|
function removeGoogleCalendarEvent(lessonList){ |
|
if(lessonList.cancelingLessonList === null || |
|
lessonList.cancelingLessonList === undefined || |
|
lessonList.cancelingLessonList === "") return Logger.log("Please check \"lessonList.cancelingLessonList\""); |
|
lessonList.cancelingLessonList.forEach(function(lesson, index){ |
|
// Lesson time |
|
var minutes = 45; |
|
var lessonTitle = lesson.lessonTitle + " " + lesson.instructor + " #" + lesson.bikeNo + " " + lesson.store; |
|
var dateList = lesson.date.split("-"); |
|
var lessonDate = new Date(dateList[0], dateList[1]-1, dateList[2], dateList[3], dateList[4], 0); |
|
var searchResult = CalendarApp.getDefaultCalendar().getEvents(lessonDate, |
|
new Date(lessonDate.getTime() + minutes * 60000), |
|
{search: lessonTitle}); |
|
if(searchResult.length === 0) return; |
|
searchResult.forEach(function(event, index){ |
|
event.deleteEvent(); |
|
Logger.log("Success to delete event! EventId: " + event.getId() + " EventTitle: " + event.getTitle()); |
|
}); |
|
}); |
|
} |