予定が入っているのを忘れて困ったことになったので、毎朝Slackにその日と次の日の予定を流すようにしてみました。 初めてGoogle Apps Script触ったけど、サーバ無しでもcronっぽいことできるし日常を便利にするのにすごく使えそう。
下のコードを日タイマーで午前6時〜7時に動くように設定して終了! (calendarIdはGoogle Calendarの設定を開いて、"カレンダーのアドレス"を見る。Slackの投稿先URLはIncoming Webhookの設定してURL見る。)
function notifyEvents() {
var today = new Date();
var tomorrow = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
_notify(_text(today) + "\n\n" + _text(tomorrow));
}
function _events(date) {
var calendarId = 'xxxxxxxxxx';
var events = CalendarApp.getCalendarById(calendarId).getEventsForDay(date);
var results = [];
for (var i = 0, l = events.length; i < l; i++) {
var event = events[i];
var s = '';
if (!event.isAllDayEvent()) {
s = _hhmm(event.getStartTime()) + '-' + _hhmm(event.getEndTime());
}
results.push(event.getTitle() + s);
}
return results;
}
function _hhmm(date) {
return Utilities.formatDate(date, 'GMT+0900', 'HH:mm');
}
function _notify(text) {
var payload = {
text: text,
channel: '#general',
username: '今日と明日の予定',
icon_emoji: ':calendar:'
}
var url = 'https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx';
UrlFetchApp.fetch(url, { method: 'POST', payload: JSON.stringify(payload) });
}
function _text(date) {
var events = _events(date);
var mmdd = Utilities.formatDate(date, 'GMT+0900', 'MM/dd');
var text;
if (events.length > 0) {
text = mmdd + "の予定:\n" + events.join("\n")
} else {
text = mmdd + 'の予定はありません'
}
return text;
}