先日、気象庁のJSONからアメダスのデータを取得するGAS(Google Apps Script)を作りましたが、もうひと手間加えてWeb APIを作ってみました。
https://script.google.com/macros/s/ABCDE12345/exec?point=36846
URLから観測所番号を取得するため、doGet関数を使います。
▼ ウェブアプリとして公開
![詳解! Google Apps Script完全入門 [第3版]](https://m.media-amazon.com/images/I/51FYffSOBcS._SL160_.jpg)
詳解! Google Apps Script完全入門 [第3版]
by SimpleImageLink

Raspberry Piでスーパーコンピュータをつくろう!
by SimpleImageLink
挙動としては、
こんな感じで、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版]](https://m.media-amazon.com/images/I/51FYffSOBcS._SL160_.jpg)
詳解! Google Apps Script完全入門 [第3版]
by SimpleImageLink

Raspberry Piでスーパーコンピュータをつくろう!
by SimpleImageLink
・関連投稿
Twitter(@nkkmd)日々更新中です。