1
0

More than 5 years have passed since last update.

晩御飯不要な時だけLINEに自動通知する。

Last updated at Posted at 2019-08-01

やりたいこと。

当日朝、家族に晩御飯が不要な時だけ自動的に通知。
基本的には何も通知しない。

上記の実装をしたのがJSもまとめに読めなかった時なので、
コードの意味を照らし合わせた時のメモ書きも一緒に晒します。

家族のGoogleカレンダーの予定をLINEに通知する
を参考にしました。ありがとうございます。

利用ツール

普段のスケジュールはlifebearで管理
晩御飯が不要になるイベントのみ、同期済みのGoogleアカウントに連携させる。

実装したコード

var lineToken = "sample"; // TODO: ここに発行したアクセストークンを記載

// 個人アカウント(gmailアドレス)とカレンダーの名称を対応付
var calendarTitleMap = {
  "piyo@gmail.com": "piyo",
};
// main関数を実行すれば全てが動く。
function main() {

  var calendars = CalendarApp.getAllCalendars();
  var eventDate = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n";

  // 拡張for文
  for (i in calendars) {
    var calendar = calendars[i];
   // 指定した時刻を表す日付オブジェクトを生成。 
  //何も指定されなかった場合は現在の(デバイスに)設定されている時刻を取得する。
    var events = calendar.getEventsForDay(new Date());
   // イベントがある場合のみ実行。 
    if (events.length > 0) {
   //*1 ここのコメントが、LINE通知に出力される。
      eventDate += "\n" + "今晩、晩御飯不要です(● ˃̶͈̀ロ˂̶͈́)੭ꠥ⁾⁾" + "\n";
    }

    for (j in events) {
      var event = events[j];
      var title = "\n" + event.getTitle();
      var start = toTime(event.getStartTime());
      var end = toTime(event.getEndTime());
     //*2 ここの記載方法でイベント名と時間が、LINEに通知される。
      eventDate += start + ' - ' + end + " " + title + '\n';
    }
    // イベントがある場合のみLINE通知の関数を実行。 
    if (events.length > 0) {
      eventDate += "\n";
      sendToLine(eventDate);
    }
  }
}

function sendToLine(eventDate) {
  var token = lineToken;
  var options = {
    "method": "post",
    "payload": "message=" + eventDate,
    "headers": {
      "Authorization": "Bearer " + token
    }

  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

function toTime(str) {
  return Utilities.formatDate(str, 'JST', 'HH:mm');
}

LINEにはイベントがあった場合、下記の形で出力

[〇〇の予定Bot] 2019/08/01

*1 今晩、晩御飯不要です(● ˃̶͈̀ロ˂̶͈́)੭ꠥ
*2 19:00 - 21:00 
友人とご飯。(登録したイベント名)

constとかに変えると不具合出るので、varのままで。
JSっぽいけど、JSじゃないんだなあ。

参考

『家族のGoogleカレンダーの予定をLINEに通知する』
https://qiita.com/monoqlock/items/55bf4860003ab1405a7f
『Google Apps Scriptを使い、Googleカレンダーの予定の中で、特定の文字列が含まれる“当日の終日イベント予定”のみをメール通知する方法』
https://techbitingbug.com/gas-morning-events/

1
0
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
1
0