0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【GAS】翌日が日本の祝日ならSlackに通知

Last updated at Posted at 2019-10-22

きっかけ

家に設置してある物理カレンダーが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");
}

#まとめ
これで明日が祝日なのかという不安からある程度解放されると思います。
ハッピーマンデー制度のおかげで可変的に祝日が動く日本つらい...。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?