#はじめに
前回投稿した毎日のごはんを楽に記録する Part3の続きです。
今回は毎週土曜日の朝になったら、先週食べた晩ごはんリストをSlackに自動投稿する機能を作ります。
#動作フロー
- 毎日のごはんを楽に記録する Part3で作成したデータベースをもとにします。
- GASで土曜日のAMにトリガーをかけ、データベースから先週の晩ごはんデータを収集し、SlackへPOSTします。
#できるようになったこと
毎週土曜日の朝になったら、先週食べた晩ごはんリストがSlackに自動投稿されます。
これにより、先週はお肉が多かったな とか、外食が多かったな と振り返ることができます。
#詳細
よくよく考えると、毎日のごはんを楽に記録する Part3で実装した処理を少しいじって、さかのぼる日数を変更するだけで実現できることに気づきました。
なので、Part3の処理を関数呼び出しだけで完結できるようにしました。
修正点は以下のみです。
- 引数termを設定し、さかのぼる日数を指定できるようにした。
- 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;
}
#得た知識
固定値はすべて外だししておくことで、再利用が簡単になるので、
関数定義の際は意識する必要がある。