Skip to content

Instantly share code, notes, and snippets.

@blkcatman
Created February 5, 2019 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blkcatman/98ef1bbbef89651033aef260d31a67f6 to your computer and use it in GitHub Desktop.
Save blkcatman/98ef1bbbef89651033aef260d31a67f6 to your computer and use it in GitHub Desktop.
GASからIncomingWebhooks経由でSlackに時報を送るサンプル
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