Created
March 27, 2016 15:54
-
-
Save nikuyoshi/6e7dc0b30dcd89fe65f4 to your computer and use it in GitHub Desktop.
FEELCYCLEから送られてくるメールを元にGoogleカレンダーに登録するGoogleAppsScript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = /日時: (.*)<br \/>/.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 = /店舗: (.*)<br \/>/.exec(plainBody)[1]; | |
fsLesson.lessonTitle = /レッスン: (.*)<br \/>/.exec(plainBody)[1]; | |
fsLesson.instructor = /インストラクター: (.*)<br \/>/.exec(plainBody)[1]; | |
fsLesson.bikeNo = /バイクナンバー:(.*)<br \/>/.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], 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], 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.deleteCalendar(); | |
Logger.log("Success to delete event! EventId: " + event.getId() + " EventTitle: " + event.getTitle()); | |
}); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment