1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

毎日のごはんを楽に記録する Part4

Last updated at Posted at 2020-01-02

#はじめに
前回投稿した毎日のごはんを楽に記録する Part3の続きです。
今回は毎週土曜日の朝になったら、先週食べた晩ごはんリストをSlackに自動投稿する機能を作ります。

#動作フロー

  1. 毎日のごはんを楽に記録する Part3で作成したデータベースをもとにします。
  2. GASで土曜日のAMにトリガーをかけ、データベースから先週の晩ごはんデータを収集し、SlackへPOSTします。

#できるようになったこと
毎週土曜日の朝になったら、先週食べた晩ごはんリストがSlackに自動投稿されます。
これにより、先週はお肉が多かったな とか、外食が多かったな と振り返ることができます。
おうちハック.jpg

#詳細
よくよく考えると、毎日のごはんを楽に記録する Part3で実装した処理を少しいじって、さかのぼる日数を変更するだけで実現できることに気づきました。
なので、Part3の処理を関数呼び出しだけで完結できるようにしました。

修正点は以下のみです。

  1. 引数termを設定し、さかのぼる日数を指定できるようにした。
  2. Slackに投稿する際の文言に、さかのぼる日数を踏まえるように修正した。

#関連箇所のコード抜粋

weeklyCheck.gs
//毎週土曜日のAMにトリガーがかかる
//EatListから先週の晩ごはんの内容を抽出し、Slackの特定チャネルへPOSTする。
function weeklyCheck() {
  var dinnerlist = ansEatList(7);  //とりあえず1週間(7日)
  postSlack(dinnerlist);  //SlackへPOST
}
main.gs
//リスト出力要請があったらSlackへ出力
function ansEatList(term){
  
  //必要情報の取得
  var today = new Date();                                                     //現在日付を取得
  var currentday = Utilities.formatDate(today,"JST","yyyy/MM/dd");            //日付を切り出し
  
  //listシートを指定
  var url = "https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXX/edit#gid=0";
  var SpreadSheet_Input = SpreadsheetApp.openByUrl(url);
  var Sheet_Input = SpreadSheet_Input.getSheetByName("list");
  
  //最終行取得
  var lastrow = Sheet_Input.getLastRow();
  
  //さかのぼる期間を設定(とりあえず2週間)
  var startday = new Date(today.getYear(), today.getMonth(), today.getDate() - term);
  
  //startdayからcurrentdayまでの晩御飯を取得して配列に格納する
  //格納用配列宣言
  var array = []; //date, menu
  
  for(var i = 2; i <= lastrow; i++){
    //まずD列の日付を見て対象期間かを判断する
    var setday = Sheet_Input.getRange(i, 4).getValue();  
    
    if(setday >= startday){
      //F列の分類を見て晩御飯かを判断する
      var setmenutype = Sheet_Input.getRange(i, 6).getValue();

      //晩御飯と判断して日付とメニューを配列へ格納する
      if(setmenutype.match(//) || setmenutype.match(//) || setmenutype.match(//)){
        var setmenu = Sheet_Input.getRange(i, 2).getValue();
        var setday2 = Utilities.formatDate(setday,"JST","MM/dd");  
        var content = [setday2, setmenu];
        array.push(content);
        
      }else{
        //晩御飯でなければ何もしない
      }
    }else{
      //対象期間外なので何もしない
    }
  }
  
  //配列の中身をSlack投稿用に整える
  var ret = "直近" + (term/7) + "週間の晩ごはんリストです。\n" + array.join("\n");
  
  return ret;
}

#得た知識
固定値はすべて外だししておくことで、再利用が簡単になるので、
関数定義の際は意識する必要がある。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?