作成物
ごみの日を前日19時にお知らせするLINE bot。
目的
- Google Apps Scriptと触れ合うこと
- カン・ビンを捨て忘れて、悲しい気持ちにならないこと
田舎に一人で暮らすものとして、たまにしか来ない「カン・ビン・ペットボトル」を逃すと、部屋の景色が著しく悪化します。こんな時こそデジタルの力に頼りましょう。
完成イメージ
Googleカレンダーにごみの日を登録しておく (年末年始以外、ほぼ定期予定)
手順
- Googleカレンダーを作成
- LINEアカウントを作成
- GoogleAppScirptで連携
a. 毎朝 関数を19時に動かすためのトリガーを作成
b. 19時 翌日のカレンダーの内容を取得し、予定があればLINEを送信
c. 毎晩 使い終わったトリガーを削除
1. Googleカレンダーを作成
設定、カレンダーの統合のカレンダーIDをメモしておきます。
もしLINEアカウントを拡散する場合は、Googleカレンダーでごみの日を把握したい派の方のために、一般公開して誰でも利用できる設定にして、LINEアカウントと一緒に配布できるようにしておきましょう。
2. LINEアカウントを作成
こちらのシリーズが大変わかりやすいので、ご参照ください。
この記事があったからこそ、今回作成に至りました。
作成後、LINEアカウントのチャンネルトークンをメモしておきます。
3. GoogleAppScirptで連携
Googleドライブで新規ドキュメントを立ち上げます。ドキュメント自体はお好きにメモとしてお使い下さい。
上のメニュー>ツール>スクリプトエディタでGoogleAppScirptのエディタが開きます。
ペタッとコードを貼ります。(もしおかしな記述があればご指摘下さい)
/* 地域ごとに関数を設定 */
function line地域名(){
const lineToken = 'チャネルアクセストークンを入力';
const calendarId = 'カレンダーIDを入力';
postToLine_( lineToken, calendarId);
}
/* 毎朝 各関数を19時に動かすためのトリガーを作成 */
function setTrigger(){
const time = new Date();
time.setHours(19);
time.setMinutes(00);
ScriptApp.newTrigger('line地域名1').timeBased().at(time).create();
ScriptApp.newTrigger('line地域名2').timeBased().at(time).create();
}
/* 毎晩 使い終わったトリガーを削除 */
function delTrigger() {
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "line地域名1"){
ScriptApp.deleteTrigger(trigger);
}
if(trigger.getHandlerFunction() == "line地域名2"){
ScriptApp.deleteTrigger(trigger);
}
}
}
/* 共通関数 */
function postToLine_( lineToken, calendarId) {
const lineUrl = 'https://api.line.me/v2/bot/message/broadcast';//共通
//明日の日付を取得
const date = new Date();
date.setDate(date.getDate() + 1);
const message = takeEventsFromCalender_(date, calendarId);
if (!message) return;
const payload = {
messages: [
{ type: 'text', text: message }
]
};
const params = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: 'Bearer ' + lineToken
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(lineUrl, params);
}
function takeEventsFromCalender_(date, calendarId) {
// カレンダーオブジェクト取得
const calendar = CalendarApp.getCalendarById(calendarId);
// 指定日(明日)の予定オブジェクトの配列を取得
const events = calendar.getEventsForDay(date);
if (events.length === 0) return;
else if (events.length === 1) return `明日は${events[0].getTitle()}の日です`;
else { //2つ以上の時は中黒でつなぐ処理
// 空っぽな配列
const newEvents = []
for (event in events) {
// 予定のタイトルを取得して、空配列に入れる
newEvents.push(events[event].getTitle());
}
const joinedEvents = newEvents.join("・")
return `明日は${joinedEvents}の日です`;
}
}
2種類のトリガーを設定します。
2種のトリガーの時間は、好きな時間帯で設定してください。午前8〜9時で設定した場合、午前8時丁度には発動せず、本当に8〜9時の間のどこかで発動します。
完成!
あとは挙動を見守って、大丈夫そうなら周りの人達に拡散します。
年度末に忘れずに、自治体のカレンダーの確認をするようにしましょう。
お世話になったリンク
ありがとうございました!!!
GASでLINEにメッセージを送るためのMessage APIの超初心者向け基礎知識
Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
Googleカレンダーから予定を取得し毎朝メールでお知らせするGAS
Messaging APIリファレンス | LINE Developers ブロードキャストメッセージ
最後に、つぶやき
Google Apps Scriptという技術を通して、さっと作れてしっかり美味しい、カレイの煮つけのようなお得感を味わせて頂きました。
(技術的に超高度ではないけど、人に喜んでもらえる)
これからもじわじわ学んで、アウトプット続けたいと思います!