https://www.pref.ehime.jp/h35126/4356/documents/qgis_manual.pdf
サービスで 1 日に使用しているコンピュータ時間が長すぎます
GAS「サービスで 1 日に使用しているコンピュータ時間が長すぎます」と この最近毎日通知がきて実はニュース停まってたりするのですが
Google Apps Script ダッシュボード - Google ドライブ
可能性の高い順番にいくと
防災チェック関連のトリガーを別のアカウントに移して様子見
- URLFetch の呼び出し 20000 個/日だと1時間でも833回は動くので大丈夫だと ダムの通知はチェック最短10分で他のは30分か1時間に変更したので落ち着くかな。 30ぐらいチェックしているのでこちらの制限だとかなり厳しい。
PythonでIFTTTのWebhookにPOST
Quickstart — Requests 2.21.0 documentation
import requests # Event Name event = 'xxxxxx' # Webhooks - Documentation - Your key isを確認 key = 'xxxxxxxxxxxxxxxx' url = 'https://maker.ifttt.com/trigger/{}/with/key/{}'.format(event, key) # Post requests.post(url, data={'value1': 'テスト', 'value2': 'てすと', 'value3': 'test'})
IFTTTのwebhookとgasでi.river.go.jpのダム情報と河川情報を通知
2021/04/18現在利用できません
IFTTT
GAS
メインの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+ を除去 var text = contents.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '').replace(/ /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+ を除去 var text = contents.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '').replace(/ /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++; }); }