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’);
と変換をしないと、日本の時刻になりませんでした。

シェアありがとうございます

  • このエントリーをはてなブックマークに追加
  • Pocket

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑