中級向け
定期実行でAPIを叩いて集計して通知する型(n8n テンプレート配布)
毎朝APIから複数地域のデータを取り、地域ごとに集計して通知用の本文にまとめるワークフローです。インポートできるJSONを配布しています。文字列のまま集計すると平均が null になる件も、実際に起こして確かめました。
公開
動作確認: — n8n 2.36.8
「毎朝APIからデータを取って、まとめて通知する」 は、業務自動化で一番よく作る形だと思います。
取得して、整形して、集計して、送る。書いてしまえば4手順ですが、 それぞれに落とし穴があります。 このサイトで検証してきた内容を、1本のワークフローに まとめました。
認証情報を使いません。気象庁の公開APIを叩くだけなので、インポートしてすぐ動きます。
何をするか
毎朝7時に、複数地域の降水確率を取得し、地域ごとに最大と平均を出して、 そのまま送れる本文にまとめます。
実際に動かした結果です。
【今日の降水確率】
東京地方: 最大 80% / 平均 64%
大阪府: 最大 80% / 平均 54%
福岡地方: 最大 80% / 平均 50%
北九州地方: 最大 80% / 平均 50%
筑豊地方: 最大 80% / 平均 50%
筑後地方: 最大 80% / 平均 50%
伊豆諸島北部: 最大 60% / 平均 50%
伊豆諸島南部: 最大 50% / 平均 40%
小笠原諸島: 最大 20% / 平均 16%
降水確率が高い順に並びます。
入れ方
- JSONをダウンロードする
- n8n の右上
...から Import from File… - Execute workflow を押す

線の上の件数を見てください。 3地域を指定したのに、取得した直後は 6 items です。 そこから降水確率を1件ずつにばらして 58 items、集計して 9 items、 最後に1件にまとめています。この増減がこのワークフローの中身です。
取りたい地域を変えるときは、「取得する地域」 の中を書き換えるだけです。
return [
{ json: { label: '東京', areaCode: '130000' } },
{ json: { label: '大阪', areaCode: '270000' } },
{ json: { label: '福岡', areaCode: '400000' } },
];
文字列のまま集計すると、平均が null になる
このテンプレートで一番気をつけたところです。
気象庁APIが返す降水確率は、数字に見えて文字列です。
"pops": ["20", "30", "80", "70", "50"]
これをそのまま Summarize の平均に渡すと、どうなるか。 両方を並べて実行して確かめました。
| 渡したもの | average の結果 |
|---|---|
Number(p) で数値に直したもの |
64 |
| 文字列のまま | null |
Webhook で受けたクエリも文字列ですし、
Merge では 1 と '1' が一致しません。
APIから来た数字は、まず型を疑うのが安全です。
3地域を指定しても、3行にはならない
上の出力を見てください。9行あります。
気象庁のAPIは、1つの県の中をさらに細かい区域に分けて返します。 東京都なら「東京地方 / 伊豆諸島北部 / 伊豆諸島南部 / 小笠原諸島」の4区域です。
失敗した地域があっても止まらない
「予報を取得」にはエラー出力を繋いであります。
1地域が取得できなくても、残りの地域の集計は出ます。 失敗した分は 「失敗を1行にまとめる」に流れ、どの地域が落ちたか分かる形で残ります。
{ "label": "大阪", "areaCode": "999999", "httpCode": "404",
"message": "The resource you are requesting could not be found" }
この型の詳しい説明は 1件失敗しても止まらない取得ワークフロー に書きました。
通知の繋ぎ方
「通知の形に整える」の後ろに Slack やメールを繋ぐだけです。 テンプレートには含めていません。使うサービスが環境によって違うためです。
本文には 本文 をそのまま入れられます。
{{ $json.本文 }}
明細が要るなら {{ $json.明細 }} に集計結果の配列が入っています。
なお、ワークフロー全体が失敗したときの通知は別の仕組みです。 共通エラー通知のテンプレート と組み合わせてください。
使い回すには
このテンプレートは気象庁APIを例にしていますが、形は他のAPIでも同じです。
- 取得する対象の一覧をつくる
- HTTP Request で取りに行く(エラー出力つき)
- 集計しやすい形に1件ずつばらす
- Summarize でグループごとに集計する
- 通知の形に整える
3番を丁寧にやるかどうかで、後の苦労が変わります。型を揃え、空の値を捨て、 1件1行にしておくと、集計が素直に通ります。
検証していないこと
- 通知ノードは繋いでいません。 Slack やメールに実際に届くところまでは見ていません
- 定時実行(Publish して7時を待つ)は試していません。 手動実行での確認だけです。 タイムゾーンは環境の設定を引き継ぐので、7:00がいつになるかは各自で確認してください
- 失敗した場合の動作は、別記事で確認した内容です。このテンプレートで 実際に地域コードを壊して試してはいません
- 気象庁APIの仕様変更には追随していません。
timeSeries[1]に降水確率が入る前提で 書いています。構造が変われば動かなくなります - 試したのは 3地域・9区域です。数十地域に増やしたときの所要時間は見ていません
- 集計の落とし穴は Summarizeノードの使い方
- 失敗を取りこぼさない型は 1件失敗しても止まらない取得ワークフロー
- 全体が落ちたときの通知は 共通エラー通知のテンプレート
- アイテムの考え方は n8n 用語集 に