GASでLINEにゴミ収集日を通知する
Google Apps Script(GAS)とは、Googleが提供しているプログラミング言語です。「Google Apps Script」の頭文字をとってGASと略されます。
Googleが提供しているプログラミング言語なので、
Gmail
Googleカレンダー
Googleドキュメント
Googleスプレッドシート
Googleスライド
Googleマップ
Googleフォーム
など
で使うことが出来ます。
今回は、GoogleスプレッドシートでGASを使ってみました。
例えば、明日が可燃ゴミの収集日なら、LINEに「明日は、可燃ゴミの日」と通知するシステムを作ってみました。
ゴミの収集日は、毎週月曜日と決まっていても、特例の日もあるので、ベタ打ちをしました。
上の画像の様に、
A1 今日の日付 =TODAY()
B2 明日の日付 =TODAY()+1
C2 B2の日付の月 =MONTH(B2)
A16~A65 4月のゴミの収集日
B16~B65 4月のゴミの収集日のゴミの種類
(例:4/1は、容器・包装用プラ)
C16~C65 5月のゴミの収集日
D16~D65 5月のゴミの収集日のゴミの種類
と、、、3月まで収集日・収集されるゴミの種類を入力してあります。
収集されるゴミの種類の最後の行には、半角で99と入力をします。
GASのコードは以下の通りです。
86行目に、LINE Notifyのアクセストークンを記述して下さい。
//ゴミの日かを判断する
function judgment(){
//対象シートのオブジェクトを取得するary = [];
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //現在のスプレッドシートを取得
let sheet=spreadsheet.getSheetByName('作業'); //現在のシートを取得
//C2,B2セルを読む
let val_C2=sheet.getRange("C2").getValue(); //月
let val_B2=sheet.getRange("B2").getValue(); //明日の日付
val_B2=Utilities.formatDate(val_B2, 'Asia/Tokyo', 'yyyy/MM/dd');
// switch文を使って条件分岐する
let range_gomi; //range_gomiは、その月のゴミの日程が書いてある範囲
let data; //その月のゴミのデータ
let ary = []; //LINEに送るメッセージ
switch(val_C2){
case 4: //4月
range_gomi=("a16:b65");
break;
case 5: //5月
range_gomi=("c16:d65");
break;
case 6: //6月
range_gomi=("e16:f65");
break;
case 7:
range_gomi=("g16:h65");
break;
case 8:
range_gomi=("i16:j65");
break;
case 9:
range_gomi=("k16:l65");
break;
case 10:
range_gomi=("m16:n65");
break;
case 11:
range_gomi=("o16:p65");
break;
case 12:
range_gomi=("q16:r65");
break;
case 1:
range_gomi=("s16:t65");
break;
case 2:
range_gomi=("u16:v65");
break;
case 3:
range_gomi=("w16:x65");
break;
}
let range=sheet.getRange(range_gomi);
let val_gomi = range.getValues(); //値の読み込み
//val_gomiを1件づつ読んで、B2セルを同じなら隣のセルのデータも読んで、メッセージを作る(配列の開始は0~
for(var key in val_gomi){
if (val_gomi[key][1]===99){ //強制的にfor文を抜ける
break;
}
data=val_gomi[key][0];
data=Utilities.formatDate(data, 'Asia/Tokyo', 'yyyy/MM/dd');
if (data===val_B2){
ary.push(val_gomi[key][1]) ;
}
}
//メッセージを送信
if(ary.length>0){
let s="明日は";
for(let i=0;i<ary.length;i++){
s=s+"\n"+ary[i];
}
sendMessage(s);
}else{
sendMessage("明日は、ゴミの日ではありません。");
}
}
//ラインにメッセージ(msg)を送る
function sendMessage(msg){
let accessToken='LINE Notifyのアクセストークンを記述する';
let options = {
"method" : "post",
"headers" : {
"Authorization" : "Bearer "+ accessToken
},
"payload" : {
"message" : msg
}
}
let url = "https://notify-api.line.me/api/notify"
UrlFetchApp.fetch(url, options)
}
スプレッドシートを毎日、自動で実行するようにしています。
難しかったのは、日付の扱い
2021/04/01 と入力をしても、GASで実行すると、まったく違う日時になってしまって、なんで?と悩みました。
GASでは、グリニッジ標準時刻だかなんだかになるみたいで、
Utilities.formatDate(data, ‘Asia/Tokyo’, ‘yyyy/MM/dd’);
と変換をしないと、日本の時刻になりませんでした。
Your Message