お世話になっております。サンシャインです。
HapInSアドベントカレンダー2024、12日目です。
昨年のアドカレで、この記事を読んで「こういうのを自分で作ってみたい!」と思ったので、Tryしてみました。
作ったもの
最近、災害に備えて防災備蓄をそろえているので、それを管理してみることにしました。 バーコードで簡単に商品を登録できるので、アプリはAppSheetで作ることに。
防災備蓄は賞味期限が長すぎて忘れそうなので、賞味期限のタイミングでLINE通知が飛ぶようにしました。
通知部分の作成
作成の注意点として、LINE Notifyは来年3月にサ終してしまうので、公式アカウントを自分で用意する必要がありました。
https://notify-bot.line.me/closing-announce
ソースコード
Google Apps Scriptで作成しました。
const LINE_URL_PUSH = "https://api.line.me/v2/bot/message/push"; // スクリプトプロパティを取得 const scriptProperties = PropertiesService.getScriptProperties(); const MY_LINE_USER_ID = scriptProperties.getProperty('MY_LINE_USER_ID'); const ACCESS_TOKEN = scriptProperties.getProperty('ACCESS_TOKEN'); const SPREAD_SHEET_ID = scriptProperties.getProperty('SPREAD_SHEET_ID'); function notification() { // 明日を取得 let baseDate = new Date(); baseDate.setDate(baseDate.getDate() + 1); // deadLine < baseDate を取得 const findResult = getNames(baseDate); // LINE通知 findResult.forEach(function(key){ const postData = { "to": MY_LINE_USER_ID, "messages": [ { "type": "text", "text": key.name + "の期限が切れそうだよ", } ] }; const headers = { "Content-Type": "application/json", 'Authorization': 'Bearer ' + ACCESS_TOKEN, }; const options = { "method": "post", "headers": headers, "payload": JSON.stringify(postData) }; //PUSH送信 UrlFetchApp.fetch(LINE_URL_PUSH, options); }); } function getNames(baseDate){ const sql = SpreadsheetSQL.SQL(SPREAD_SHEET_ID, "Inventory"); sql.select(["name"]); sql.where( [ "deadLine", //カラム名 "<", //関係子 baseDate //値 ] ); return sql.get(); }
トリガーの設定
トリガーは以下のように設定しました。 が、月1チェックとかで十分な気がします。
スクリプトプロパティの設定
APIキーなどは隠したいのでスクリプトプロパティに設定しました。
ここで、自分のLINEのユーザーID(内部的なもので、自分で設定するものとは別!)が必要です。
ライブラリ
今回はこちらのライブラリを使用させていただきました。
スプレッドシートを検索するのは、コードで書くとめんどくさい&分かりづらいので、とてもおすすめです。
初めて使ってみましたが、簡単に検索出来て、感動しました。
DIYって、良いですよね!
勉強も大切ですが、目的を達成するためにあれこれするのって、エンジニアっぽくていいですよね!
弊社、家計簿とか作っている人もいて、とても刺激になります。
また何か作ります!