はじめに
GoogleAppsScriptを使い始めてまだ日が浅いですが、超絶便利だったので投稿します。
目的
自動でslackに通勤で使う電車の運行状況の通知を受け取る
準備
- slackにIncoming Webhooksを追加 参考:https://qiita.com/hey_you/items/e8b2d8bf16400fe5afd3
- 鉄道情報のjson(今回使うAPI): https://rti-giken.jp/fhc/api/train_tetsudo/
- Googleスプレッドシート->ツール->スクリプトエディタでコードを書く準備
実装
コーディングStart!
// その日の7:30にトリガーを設定
function setTrigger() {
var triggerDay = new Date();
triggerDay.setHours(7);
triggerDay.setMinutes(30);
ScriptApp.newTrigger("slackPost").timeBased().at(triggerDay).create();
}
//その日のトリガーを削除する
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "main") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
function slackPost() {
try {
deleteTrigger();
var url = "https://tetsudo.rti-giken.jp/free/delay.json";
var toSlackUrl = "Incomng WebhooksでコピーしたURL";
var currentDate = new Date();
var date = Utilities.formatDate( currentDate, 'Asia/Tokyo', 'MM/dd HH:mm');
var response = UrlFetchApp.fetch(url);
var trainData = JSON.parse(response.getContentText());
var message = "\n" + "◆関東遅延情報 " + date + "\n" +"━─━─━─━─━─━─━─━"+ "\n" +"*◯平常運転です*" + "\n"+"━─━─━─━─━─━─━─━";
for each(var obj in trainData) {
if (obj.name == "通勤で使う電車名(鉄道情報のjsonで確認してください)") {
message = "\n" + "◆関東遅延情報 " + date + "\n" +"━─━─━─━─━─━─━─━"+ "\n" + "*△"+ obj.company + "*:*" +obj.name +"*"+ "\n"+"━─━─━─━─━─━─━─━";
}
}
postMessage(message, toSlackUrl);
}catch(e){
Logger.log("実行エラー" + e);
postMessage("◆Script実行エラーです。");
}
}
function postMessage(message, hookPoint){
try {
var payload = {
"text": message,
}
var options = {
"method": "POST",
"payload": JSON.stringify(payload),
"headers": {
"Content-type": "application/json",
}
}
var response = UrlFetchApp.fetch(hookPoint, options);
if (response.getResponseCode() == 200) {
return response;
}
return false;
}catch(e){
Logger.log("実行エラー" + e)
postMessage("◆Script実行エラーです。");
}
トリガーについて
私の場合、7:30に通知が欲しいので、それより前の時間帯(午前6時〜7時)でsetTriggerを実行して、slackPost()を実行する設定にしています