挙動としては、
こんな感じで、GASでウェブアプリとして公開したURLの後ろに「?point=」と観測所番号(小名浜の場合は「36846」)を付けてリクエストすると、
該当観測所の最新のアメダスのデータがJSON形式で返ってきます。
{"pressure":[1007.2,0],"normalPressure":[1007.8,0],"temp":[1.2,0],"humidity":[62,0],"visibility":[20000,0],"sun10m":[0,0],"sun1h":[0,0],"precipitation10m":[0,0],"precipitation1h":[0,0],"precipitation3h":[0,0],"precipitation24h":[0,0],"windDirection":[15,0],"wind":[1.4,0]}
まぁ、GASでこれを作っても、公開するには実行回数や時間等に制限があって向かないし、自分で使うならわざわざHTTPを挟む必要がないので使い所が微妙なのですが、自前でサーバーを用意して作ればいろいろ活用できそうな気が。Raspberry Piクラスタでサーバー立てたいなぁ、と前々から思っていたのでどこかのタイミングで……。でも、実際に運用するとなると……(よく分かってない)。
-----
・追記(2022-2-10)
Python + Flask + Heroku でWeb APIを作成しました → 「最新のアメダスのデータを JSON 形式で取得する Web API を作りました。」
-----
閑話休題。
以下、備忘録を兼ねた作り方です。
▼ コードの作成
Google Apps Scriptから新しいプロジェクトを作成します。
Google Apps Scriptから新しいプロジェクトを作成します。
タイムゾーンは、「Asia/Tokyo」に変更してください。(「プロジェクトの設定」→「「appsscript.json」マニフェスト ファイルをエディタで表示する」をチェックから「appsscript.json」内を編集。)
URLから観測所番号を取得するため、doGet関数を使います。
function doGet(e) { let url = "https://www.jma.go.jp/bosai/amedas/data/map/"; url = url + getDataTime() + "00.json"; const point = e.parameter.point; //JSONの取得 let response = ""; try { response = UrlFetchApp.fetch(url); } catch(e) { return response; } let data = JSON.parse(response.getContentText()); let amds_json = data[point]; //JSONの出力 let out = ContentService.createTextOutput(); out.setMimeType(ContentService.MimeType.JSON); out.setContent(JSON.stringify(amds_json)); return out; } function getDataTime() { //取得データの日時を定義 let date_and_time = new Date(); let hour = Utilities.formatDate(date_and_time, "JST", "HH"); let min = Utilities.formatDate(date_and_time, "JST", "mm") - 12; //12分猶予 min = (Math.floor(min / 10) * 10); if(min == -10 || min == -20) { if(hour == 0) { let day = date_and_time.getDate(); date_and_time.setDate(day - 1); hour = "23"; } else { hour = hour -1; } min = "50"; } else if (min == 0) { min = "00"; } let date = Utilities.formatDate(date_and_time, "JST", "yyyyMMdd"); let dataTime = date + ("00" + hour).slice(-2) + min; return dataTime; }
※ コードを一部修正(2022-2-12)
※ コードを一部修正(2022-2-21)
JSON形式で提供されているアメダスのデータから当該観測所のデータをまるっと抽出、再度JSON形式で出力します。
getDataTime関数は、取得するデータの日時を定義しています。
ウェブアプリケーションとして公開します。
「デプロイ」→「新しいデプロイ」から、
「説明」→「Amedas Web API」(適当に)
「次のユーザーとして実行」→「自分」
「アクセスできるユーザー」→「全員」
として、デプロイを実行。
初回の「アクセスを承認」がまだの場合は、承認をします。
これで、発行されたウェブアプリのURLの末尾に「?point=観測所番号」を付けてアクセスすると、JSON形式のデータが返ってきます。
(観測所番号は、前の投稿を参考に取得してください。)
***
無事に動きましたでしょうか。
感想としては、思ったよりも簡単でした。農業に役立つWeb APIとかいろいろ作れたらいいですね。
大きな投資をせずとも、身近なICT活用によって農業ってすごくやりやすくなると思っています。本当に、やり方次第ですね。小さなところからコツコツやっていきましょう。
詳解! Google Apps Script完全入門 [第3版]
by SimpleImageLink
Raspberry Piでスーパーコンピュータをつくろう!
by SimpleImageLink
・関連投稿
Twitter(@nkkmd)日々更新中です。