Created
February 10, 2019 14:21
-
-
Save pocke/8d907fa42e58104d72f4dcf264825045 to your computer and use it in GitHub Desktop.
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
// Sync personal calendar to work calendar | |
function syncCalendar() { | |
var FROM_EMAIL = '[email protected]'; | |
var TO_EMAIL = '[email protected]'; | |
var HUB_CALENDAR_ID = '[email protected]' | |
var from_events = getEvents(FROM_EMAIL); | |
var hub_events = getEvents(HUB_CALENDAR_ID); | |
var hub_cal = CalendarApp.getCalendarById(HUB_CALENDAR_ID); | |
from_events.forEach(function(ev) { | |
var id = ev.getId(); | |
var idMD5 = md5(id); | |
var evHub = find(hub_events, function(evHub) { return idMD5 === evHub.getDescription().trim()}); | |
if (!evHub) { | |
Logger.log("Creating an event for " + id); | |
var newEv; | |
if (ev.isAllDayEvent()) { | |
newEv = hub_cal.createAllDayEvent("予定あり", ev.getStartTime(), ev.getEndTime(), {description: idMD5}); | |
} else { | |
newEv = hub_cal.createEvent("予定あり", ev.getStartTime(), ev.getEndTime(), {description: idMD5}); | |
} | |
newEv.addGuest(TO_EMAIL); | |
} else { | |
var hubStartTime = evHub.getStartTime(); | |
var hubEndTime = evHub.getEndTime(); | |
var origStartTime = ev.getStartTime(); | |
var origEndTime = ev.getEndTime(); | |
if (hubStartTime.getTime() !== origStartTime.getTime() || hubEndTime.getTime() !== origEndTime.getTime()) { | |
Logger.log("Updating event " + id + " / " + idMD5); | |
if (ev.isAllDayEvent()) { | |
evHub.setAllDayDate(ev.getStartTime(), ev.getEndTime()); | |
} else { | |
evHub.setTime(ev.getStartTime(), ev.getEndTime()); | |
} | |
} else { | |
Logger.log("No Update for event " + id + " / " + idMD5); | |
} | |
} | |
}) | |
} | |
function getEvents(id) { | |
var MONTH = 31 * 24 * 60 * 60 * 1000; | |
var now = new Date(); | |
var from = new Date(now.getTime() - 2 * MONTH); | |
var to = new Date(now.getTime() + 2 * MONTH) | |
Logger.log('from: ' + from); | |
Logger.log('to: ' + to); | |
var cal = CalendarApp.getCalendarById(id); | |
return cal.getEvents(from, to); | |
} | |
function md5(str) { | |
var v = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, str); | |
return v.toString(); | |
} | |
function find(arr, f) { | |
for (var i = 0; i < arr.length; i++) { | |
var item = arr[i]; | |
if (f(item)) { | |
return item; | |
} | |
} | |
return null; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Google Calendarの予定を同期するGAS。
要件
使い方
hub
カレンダーを作成hub
カレンダーのIDを取得FROM_EMAIL
,TO_EMAIL
,HUB_CALENDAR_ID
の3つの変数を埋めるやっていること
FROM_EMAIL
のカレンダーから、現時刻から前後二ヶ月の予定を全て取得する。hub
カレンダーに、タイトルを「予定あり」に変換した上で取得した予定をコピーする。hub
カレンダーに追加した予定に、TO_EMAIL
のGoogleアカウントをinviteするなぜこんな回りくどいことをやっているのか