0
0

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.

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

Last updated at Posted at 2019-12-30

#はじめに
前回投稿した毎日のごはんを楽に記録する Part2の続きです。
今回は***「最近何食べた?」とSlackに書き込むと、過去2週間の夕食で食べたものリストを
botが返してくれる機能***を作ります。

#動作フロー

  1. slackで「最近何食べた?」などの特定フレーズをOutgoing webhookでGAS(Google Apps Script)へ通知する。
  2. Part2で作成したスプレッドシートの内容から、晩ごはんのリストを抽出する。
  3. Slackに投稿するときに見やすい形にする。
  4. Slackへ投稿する。
    図1.png

#できるようになったこと
slackで「最近何食べた?」とつぶやくと、過去2週間の晩ごはんリストをbotが返答してくれる。

#関連箇所のコード抜粋

main.gs
//リスト出力要請があったらSlackへ出力
function ansEatList(){
  
  //必要情報の取得
  var today = new Date();                                                     //現在日付を取得
  var currentday = Utilities.formatDate(today,"JST","yyyy/MM/dd");            //日付を切り出し
  
  //listシートを指定
  var url = "https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXX/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() - 14);
  
  //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 = "直近2週間の晩ごはんリストです。\n" + array.join("\n");
  postSlack(ret);
}

#得た知識

  1. Outgoing webhookからの投稿は、トークンで見分けることができる。

    参考サイト:SlackのOutgoing WebHooksとGoogleAppsScriptで簡単な会話botを作ってみた
  2. 2次元配列の連結にはarray.joinが便利
  3. 日付の比較にも演算子が使える
  4. 2週間前の日付を取得するには、以下のように書けばよい。
date.gs
var startday = new Date(today.getYear(), today.getMonth(), today.getDate() - 14);

#追記
Part4はこちらです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?