サービスで 1 日に使用しているコンピュータ時間が長すぎます

GAS「サービスで 1 日に使用しているコンピュータ時間が長すぎます」と この最近毎日通知がきて実はニュース停まってたりするのですが

Google Apps Script ダッシュボード - Google ドライブ

可能性の高い順番にいくと

  1. トリガーの合計実行時間 1 時間/日だと多分これが引っかかってる気がするので 野村ダムと鹿野川ダムのバックアップするスクリプトを停止しました。 ふるさとチョイスはとりあえずそのままにしてます。

防災チェック関連のトリガーを別のアカウントに移して様子見

  1. URLFetch の呼び出し 20000 個/日だと1時間でも833回は動くので大丈夫だと ダムの通知はチェック最短10分で他のは30分か1時間に変更したので落ち着くかな。 30ぐらいチェックしているのでこちらの制限だとかなり厳しい。

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

2021/04/18現在利用できません

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);
            
        }
    }
}

node

nodeをインストール

curl -L git.io/nodebrew | perl - setup
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.profile
source ~/.profile

nodebrew

nodebrew install-binary v8.12.0
nodebrew use v8.12.0

node --version
mkdir workspace
cd workspace
npm

npm init -y

# パッケージの依存関係
npm -g ls

npm install -g yarn
npm yarn
npm install yarn install
npm install パッケージ名 --save yarn add パッケージ名
npm install ーg パッケージ名 yarn global add パッケージ名
npm uninstall パッケージ名 --save yarn remove パッケージ名
npm install --save-dev eslint
node ./node_modules/eslint/bin/eslint.js --init

Use a popular style guide

Airbnb

React N

JSON

Y

Google Apps ScriptでJson Feedを取得

function myFunction() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('西予市');
  sheet.clear();

  var row = 1;

//新着
  var url = 'http://www.city.seiyo.ehime.jp/index.update.json';
  
//緊急情報
//var url = 'https://www.city.seiyo.ehime.jp/kinkyu/index.update.json';

  var result = UrlFetchApp.fetch(url);

  var json = result.getContentText();
  var items = JSON.parse(json);
  
  items.forEach(function(item){
  
    sheet.getRange(row, 1).setValue(item.page_name);
    sheet.getRange(row, 2).setValue(item.url);
    sheet.getRange(row, 3).setValue(item.publish_datetime);
    
    row++;
  });
}