イベントの申し込みやアンケートの回答の状況を定期的に把握しておきたい(特にチームでなんか運営していて、集まりが芳しくないときにプッシュせにゃならぬ)ときがある。
総数だけ知りたい。その数。それ。
…ので、それ用のお手軽コードを書いた。
作業すること(全体の流れ)
- Googleフォームにスクリプトを書く
- トリガーを登録する
- Discordに結果が届くのを待つ
スクリプト抜粋
回答数を調べるところ
フォームの回答数は、単純に Form クラスの getResponses()
の戻り値の数を取得するだけ。
FormApp.getActiveForm().getResponses().length
Discord に投稿するところ
Discord の特定のチャンネルへの投稿は UrlFetchApp クラスの fetch(url, params)
を使う。Webhook URL の取得方法は割愛。
const m = `現在の回答数 ${FormApp.getActiveForm().getResponses().length}`; //回答数
const u = '[Webhook url]'; //Discord の Webhook URL を貼付
const o = {'method':'post',
'contentType':'application/json',
'payload':JSON.stringify({'content':m})};
try{
const r = UrlFetchApp.fetch(u, o);
Logger.log(`code=${r.getResponseCode()}`); //204ならヨシ!!
}catch(e){ Logger.log(e); }
特定の日時に処理を実行するところ
めんどくさいので今回は myFunction()
に全てのコードを書いて、それをトリガーに登録するだけにした。1回だけ実行するならこれでOK。
日付の書式は YYYY-MM-DD HH:MM
。
特定の日時になるまで毎日特定の時間にチェックするところ
現在の状況をなんとなく毎日知りたいので、先のトリガを「日付ベースのタイマ」に変更して、 myFunction()
の最後の行に下記3行を追加した。
const nd = new Date(); //now date
const cd = new Date('[YYYY-MM-DD HH:mm]'); //for compire
if(nd>=cd)ScriptApp.getProjectTriggers().forEach(i=>ScriptApp.deleteTrigger(i));