きっかけ
家に設置してある物理カレンダーが2019年限定祝日「即位礼正殿の儀」に対応しておらず、
本当に祝日か不安となったためです。
#コード仕様
Google が提供している「日本の祝日」カレンダーの内容を GASとSlack の Webhook を利用して Slack に通知と飛ばします。
また、翌日が祝日でない場合は通知は飛びません。
参考サイト
以下のサイト手順、コードを参考としました。
コードの著作権は作成者である「スズキアユミ」様となります。
Slack Bot:毎朝Googleカレンダーの予定を通知してくる秘書ねこBotの作り方 | デザインメモ 2.0
https://designmemo.jp/creative/bot-googlecalendar-slack.html
事前準備
Slack Webhook URL 取得などの一連の手順は参考サイトなどをご参考ください。
最低限、以下の3つは必要となります。
- Slackへの登録
- Slack にて Incoming WebHooks URLを取得
- Googleアカウントの作成
#GASコード
下部にある Webhook URL を記載する箇所は自身で取得した Webhook URL を記載してください。
public_holiday.gs
function myFunction() {
var list = "";
var s;
var calId = "ja.japanese#holiday@group.v.calendar.google.com"; //「日本の祝日」GoogleカレンダーのID
s = listupEvent(calId); // function listupEvent を呼び出し
if (s != "") list += "\n■明日の祝日\n" + s; // メッセージの見出し作成
Logger.log(list);
if (list != "") {
var payload = {
"text" : "おはようございます。\n明日は祝日です。今日一日頑張って明日は気兼ねなく休みましょう!\n" + list, // メッセージの本文
}
postSlack(payload);
}
}
function listupEvent(cal_id)
{
var list = "";
var cal = CalendarApp.getCalendarById(cal_id);
var now = new Date();
var tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
var events = cal.getEventsForDay(tomorrow);
for(var i=0; i < events.length; i++){
s = "";
if (events[i].isAllDayEvent()) {
s += Utilities.formatDate(events[i].getStartTime(),"GMT+0900","MM/dd ");
} else {
s += Utilities.formatDate(events[i].getStartTime(),"GMT+0900","MM/dd HH:mm");
s += Utilities.formatDate(events[i].getEndTime(), "GMT+0900","-HH:mm ");
}
s += events[i].getTitle();
Logger.log(s);
list += s + "\n";
}
return list;
}
function postSlack(payload)
{
var options = {
"method" : "POST",
"payload" : JSON.stringify(payload)
}
var url = "https://XXXXXX"; // ★取得した Webhook URL を記載してください。
var response = UrlFetchApp.fetch(url, options);
var content = response.getContentText("UTF-8");
}
#まとめ
これで明日が祝日なのかという不安からある程度解放されると思います。
ハッピーマンデー制度のおかげで可変的に祝日が動く日本つらい...。