Skip to content

Instantly share code, notes, and snippets.

@nikuyoshi
Created March 27, 2016 15:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nikuyoshi/6e7dc0b30dcd89fe65f4 to your computer and use it in GitHub Desktop.
Save nikuyoshi/6e7dc0b30dcd89fe65f4 to your computer and use it in GitHub Desktop.
FEELCYCLEから送られてくるメールを元にGoogleカレンダーに登録するGoogleAppsScript
function setMyGoogleCalendar(){
var gmailThread = specifyMailFromFeelcycle();
var lessonList = parsePlainBody(gmailThread);
createGoogleCalendarEvent(lessonList);
removeGoogleCalendarEvent(lessonList);
}
function specifyMailFromFeelcycle(){
var gmailThreads = GmailApp.search("from:feelcyclem@feelcycle.com FEELCYCLE ご予約登録");
// Get the registering threads
var registeringThread = gmailThreads[0];
gmailThreads = GmailApp.search("from:feelcyclem@feelcycle.com 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