IFTTTのwebhookとgasでi.river.go.jpのダム情報と河川情報を通知

moguno.hatenablog.jp

IFTTT

f:id:imabari_ehime:20180902160705p:plain

GAS

  1. praseで範囲を絞り込んで
  2. タグ除去と を除去
  3. 正規表現で抽出し、IFTTTにwebhookでデータをPOST
  4. IFTTTがTwitterにPOST
  5. 10分毎に繰り返し

メインのURLとtwitの部分変更したら全国の市町村にも適用できるはず

// IFTTTにWebHookをPOSTする
function sendIFTTTWebHook(endpoint, values) {
    var message = {
        "value1": values[0],
        "value2": values[1],
        "value3": values[2]
    };

    var options = {
        "method": "POST",
        "headers": {
            "Content-Type": "application/json"
        },
        "payload": JSON.stringify(message)
    };

    UrlFetchApp.fetch("https://maker.ifttt.com/trigger/" + endpoint + "/with/key/xxxxxxxxxxx", options);
}

function getDAMDATA(url) {
    var html = UrlFetchApp.fetch(url).getContentText("Shift_JIS");
    var contents = Parser.data(html).from('<a name="contents">').to('<a name="footer" id="footer">').build();

    //tag+&nbsp;を除去
    var text = contents.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '').replace(/&nbsp;/gi, ' ');

    var values = text.match(/(\d+\/\d+ \d+:\d+)\s+現在\s+テレメータ流域平均雨量\s+時間雨量\s+(\S+\s+mm)\s+累加雨量\s+(\S+\s+mm)\s+全流入量\s+(\S+\s+m3\/s)\s+全放流量\s+(\S+\s+m3\/s)\s+貯水位\s+(\S+\s+m)\s+貯水量\s+(\S+\s+千m3)\s+貯水率\(対利水容量\)\s+(\S+\s+%)\s+貯水率\(対有効容量\)\s+(\S+\s+%)/);

    Logger.log(values);

    return values.slice(1);
}

function getRIVERDATA(url) {
    var html = UrlFetchApp.fetch(url).getContentText("Shift_JIS");
    var contents = Parser.data(html).from('<a name="contents">').to('<font color="purple">').build();

    //tag+&nbsp;を除去
    var text = contents.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '').replace(/&nbsp;/gi, ' ');

    var value = text.match(/水位:\s+(\S+\s+m)\s+/);

    Logger.log(value);

    return value[1];
}


// メイン
function main() {
    //玉川ダム
    var damdata = getDAMDATA('http://i.river.go.jp/_-p01-_/p/ktm1801020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006');
    //蒼社川水位
    var takano = getRIVERDATA('http://i.river.go.jp/_-p01-_/p/ktm1201020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900400021');
    var katayama = getRIVERDATA('http://i.river.go.jp/_-p01-_/p/ktm1201020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900400025');

    //Logger.log(damdata);
    
    lv = parseFloat(takano);

    if(!isNaN(lv)) {
    
        // 高野の水防団待機水位が3.5m
        if(lv > 3.4) {

            var twit = [damdata[0] + "現在", "\n\n【ダム】" + "\n時間雨量:" + damdata[1] + "\n累加雨量:" + damdata[2] + "\n\n流入量:" + damdata[3] + "\n放流量:" + damdata[4] + "\n\n貯水位:" + damdata[5] + "\n貯水量:" + damdata[6] + "\n貯水率(利水):" + damdata[7] + "\n貯水率(有効):" + damdata[8], "\n\n【水位】" + "\n片山:" + katayama + "\n高野:" + takano + "\n\nhttp://i.river.go.jp/_-p01-_/p/xmn0501010/?mtm=10&swd=&prf=3801&twn=3801202\n\n#今治 #玉川ダム #蒼社川"];

            sendIFTTTWebHook("dam_trigger", twit);
            
        }
    }
}