Created
February 5, 2019 14:24
-
-
Save blkcatman/98ef1bbbef89651033aef260d31a67f6 to your computer and use it in GitHub Desktop.
GASからIncomingWebhooks経由でSlackに時報を送るサンプル
This file contains 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 isHoliday(date) { | |
if (date.getDay() === 0 || date.getDay() === 6) { | |
return true; | |
} | |
var calId = 'ja.japanese#holiday@group.v.calendar.google.com'; | |
var calendar = CalendarApp.getCalendarById(calId); | |
var events = calendar.getEventsForDay(date); | |
return events.length > 0; | |
} | |
function createNextHourTrigger(currentHour) { | |
// 既存の時報トリガーをすべて削除する | |
clearAllTimeSignalTriggers(); | |
var date = new Date(); | |
if (currentHour < 23) { | |
// 現時刻が23時以前のときは次の時刻の時報トリガーを作成する | |
var nextHour = currentHour + 1; | |
date.setHours(nextHour); | |
date.setMinutes(0); | |
date.setSeconds(0); | |
ScriptApp.newTrigger("timeSignal").timeBased().at(date).create(); | |
} else { | |
// 現時刻が23時以降の時は次の日の時報トリガーを作成する | |
var nextDate = new Date(); | |
var count = 1; | |
nextDate.setDate(date.getDate() + count); | |
// 明日が休日なら明後日、明後日も休日なら明々後日...と休日でない日を次の時報開始日にする | |
while (isHoliday(nextDate)) { | |
count++; | |
nextDate.setDate(date.getDate() + count); | |
} | |
nextDate.setHours(0); | |
nextDate.setMinutes(0); | |
nextDate.setSeconds(0); | |
ScriptApp.newTrigger("timeSignal").timeBased().at(nextDate).create(); | |
} | |
} | |
function createNextTimeSignalNow() { | |
var date = new Date(); | |
var time = date.toTimeString(); | |
var hour = parseInt(time.split(':')[0], 10); | |
createNextHourTrigger(hour); | |
} | |
function clearAllTimeSignalTriggers() { | |
var triggers = ScriptApp.getProjectTriggers() | |
if (Array.isArray(triggers)) { | |
triggers.forEach(function(trigger) { | |
// timeSignalのトリガーのみを削除する | |
if(trigger.getHandlerFunction() === 'timeSignal') { | |
ScriptApp.deleteTrigger(trigger); | |
} | |
}) | |
} | |
} | |
function sendHttpPost(text){ | |
var url = '<ReplaceHereYourWebhookURL>' | |
var json = { | |
'text' : text | |
}; | |
var payload = JSON.stringify(json) | |
var options = { | |
'method' : 'post', | |
'contentType' : 'application/json', | |
'payload' : payload | |
}; | |
UrlFetchApp.fetch(url, options); | |
} | |
function timeSignal() { | |
var date = new Date(); | |
var time = date.toTimeString(); | |
var hour = parseInt(time.split(':')[0], 10); | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var sheet = spreadsheet.getSheets()[0]; | |
var range = sheet.getRange(hour+1, 2); | |
var value = range.getValue(); | |
if (value) { | |
sendHttpPost(value); | |
console.log("Time signal invoked at " + hour + ':00'); | |
} | |
createNextHourTrigger(hour); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment