GoogleカレンダーからLINEに通知を送る方法
はじめに
こんにちは。 SHIFTアジャイルサービスグループの中野です。
今回はタイトルの通り、Googleカレンダーの予定を自動で取得してLINEに通知を送るやり方をご紹介します!
背景としては子供のテスト期間までの日数や一大イベントまでの残り日数を
カレンダーから数えるのが非常に面倒・・・。
自動で計算して出してほしい・・・!
という日常における課題がありました。
そこで今回は、そんな悩みを自動化により解決するために
「通知先は家族で使っているLINEグループに送れると尚よいな~」
などと思いながら作業に取り掛かりました。
そうです、メンドウなものは全部自動化したい。
ということで、似たようなお悩みを持つ方のご参考になれば幸いです!
Step1:要件の明確化
Googleカレンダーの予定からLINEに通知を定期処理で送りたい
子供のテスト期間までの日数や一大イベントまでの残り日数を数えたい
通知先は家族でLINEグループを作成していたのでそこに送る様にしたい
メンドウなものは全部自動化したい
Step2:実現方法の調査
Google Apps ScriptでScriptを書いてLINE Notifyを利用してLINEに通知を送る。
Googleカレンダーから情報を読み取るのに都合がよいのは何かなーといつものGoogle先生と対話してGoogle Apps Scriptで実現するのが良いかも!と助言を頂きました。(類似の要件でブログを書いているモノを発見!)
Step3:開発の事前準備
Google Apps Script、Googleカレンダーを利用するため、Googleアカウントを取得
LINEのトークンをLINE Notifyで発行
Googleカレンダーのカレンダー設定メニューのカレンダーIDを取得(今回はアカウント内の特定のカレンダーを対象に実行したかったため取得)
Step4:Google Apps Scriptの開発
Google DriveでGoogle Apps Scriptのファイルを新規作成
Google Apps Scriptのプロジェクトの設定メニューの下部にあるスクリプト プロパティにLINE Notifyで発行したトークン値を入力
LINEへの通知を定義する
カレンダーのイベントを取得する処理を定義する
カウントダウン処理を定義する
指定のマークの無い場合のスキップ処理を定義する
LINEに送信する文字列を変数含め定義する
編集した文字列をLINEにSendする
以下サンプルコード
// 設定
var COUNT_DATE = 265; // 向こう30日の予定に関してカウントする
var IMP_MARK = "★"; // 重要なイベントを表す記号
var MAIL_TITLE = "[カウントダウン]"; // メールのタイトル
//LINEに通知
function SendToLine(message){
//ファイル→プロジェクトのプロパティ→スプリクトのプロパティからLINE_TOKENを設定しておく
var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
var op =
{
"method" : "post",
"Content-Type" : "application/x-www-form-urlencoded",
"payload": "message=" + message,
"headers":{"Authorization" : "Bearer " + token}
};
var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op);
Logger.log(JSON.parse(res.getContentText())); //Response
}
function CalendarCountDate() {
var DAY_MSEC = 1000 * 60 * 60 * 24;
// カレンダーを得る
var cal = CalendarApp.getCalendarById("XXXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com");
// 指定日以内のイベントを得る
var today = new Date();
var endDate = new Date(today.getTime() + DAY_MSEC * COUNT_DATE);
var events = cal.getEvents(today, endDate);
// 各イベントをカウントダウンする
var res = "";
for (var i in events) {
var event = events[i];
var start_d = event.getStartTime();
var diff_msec = start_d.getTime() - today.getTime();
var diff_date = Math.ceil(diff_msec / DAY_MSEC);
var title = event.getTitle();
// 重要マークのないイベントはスキップする
if (title.indexOf(IMP_MARK) < 0) continue;
var td = "";
var message = "";
if (diff_date <= 0) {
td += "[今日]";
} else {
td += "[" + diff_date + "日後(" +
(1 + start_d.getMonth()) + "/" + start_d.getDate() + ")]";
}
td += " " + title;
res += td + "\n";
message += "\n◆◇予定の一覧◇◆\n"+res;
}
SendToLine(message);
}
※上記コードをtext化したモノ
Step5:自動実行の設定
Google Apps Scriptのトリガーメニューからトリガーの追加
各種実行したいタイミングを設定
Step6:稼働確認
日時で夜8-9時の間に実行される※今回は左記時刻でセット
おわりに
無事LINEに通知を送ることが出来るようになりました!
これで「○○まで後何日?」と確認する必要が無くなる!
ただ、子供には大変不評です・・・何故・・・(もう少し大人になればきっとわかってくれるはず!)
お問合せはお気軽に
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら