環境省・花粉APIのGoogle Apps Script(GAS)による取得方法~無料で花粉飛沫量を入手

2021年7月4日

環境省は日本全国の花粉の散布データを計測しており、そのデータをAPIで利用できるシステムを提供しています。

Google Apps Script(GAS)を使って、花粉APIから花粉の飛沫情報を取得する方法を解説します。

※(2022年3月9日追記)環境省花粉計測システム「はなこさん」のAPIは2022年3月31日をもって提供終了と発表されました。

そのため、本記事で紹介しているGASスクリプトは2022年4月1日以降、実行できなくなります。

環境省が花粉観測情報サービスの「はなこさん」運営

環境省は、花粉情報を提供するWebサービス「環境省花粉観測システム はなこさん」を運営しています。

環境省が運営している花粉量測定システムはなこさんのWeb画面

環境省花粉観測システム はなこさん

日本全国に設置された花粉自動測定器のデータが公開され、どの地域で花粉の飛沫量が多いか確認することができます。

国家機関である環境省が運営しているWebサービスということで花粉データとしての信頼性も高いのが特徴です。

はなこさんの花粉情報APIは無料

さらに、花粉観測システムはなこさんでは、各種プログラミングやアプリからも情報を取得できるようにAPIが提供されています。

API利用については、個人利用については無償利用でき、サービス連携する場合は個別相談が必要です。

個人利用の場合、特に利用登録も必要なく、認証キー等不要で実行できる無料APIなので、手軽に利用できます。

他にもウェザーニュースなどが1km単位のより高精度な花粉情報をAPIで提供していますが、こちらは有料です。

ちょっとしたプログラムで花粉情報を紹介する場合には、環境省の花粉観測システムのはなこさんのAPIが便利に利用できます。

Google Apps Script(GAS)で花粉APIを取得可能

環境省の花粉計測システムはなこさんは、APIで花粉情報が取得できるため、Google Apps Script(GAS)のスクリプトで利用可能です。

はなこさんの花粉APIは、シンプルなHTTPのGET通信で花粉情報を取得できるため、コードの難易度も易しいです。

※GASでのHTTP通信のやり方は以下の記事をお読みください。

GASによるHTTPリクエスト(GET/POST)方法を解説!UrlFetchAppクラスでフェッチ

GASのコードでUrlFetchApp.fetchを使って花粉APIにリクエストし、JSONデータを取得することができます。

JSON.parseメソッドでJSONをオブジェクトに変換後に、処理をすることで、花粉情報を抽出できます。

GASでJSON形式データを読み込み、処理可能なオブジェクトや配列に変換する方法

環境省の花粉APIはなこさんの仕様

環境省の花粉計測システムはなこさんのAPI仕様について解説します。

花粉APIから取得できる情報は以下の項目となっています。

環境省の花粉観測システムはなこさんのAPIでやり取りするJSONのデータフォーマット

いずれのデータも取得時には必ず存在し、省略されることはありません。

花粉データとしては、11番目にある「花粉飛沫数(個/m3)」が重要な数値です。

花粉APIへのリクエストは、HTTP GETで以下のURL形式でリクエストします。

環境省の花粉観測システムはなこさんのAPIのHTTP GETによるリクエスト方法

例えば、東京都で2021年3月の花粉データを取得する場合は、以下のパラメータを付与する形でHTTP GETします。

https://kafun.env.go.jp/hanako/api/data_search?Start_YM=202103&End_YM=202103&TDFKN_CD=13

※実際にChromeなどのブラウザのURL欄に打ち込んで実行すると、JSON形式のデータが表示されます。

なお、都道府県の指定には都道府県コードを使用するので、東京の場合は「13」を指定します。

Google検索で「都道府県コード」などで検索して、確認したい地域のコードを取得します。

GASで花粉APIを取得するサンプルコード

実際にGoogle Apps Script(GAS)ではなこさんの花粉APIを取得するサンプルコードを解説します。

今回は花粉が最も多い、2021年3月の東京のデータをリクエストしてみます。

花粉APIリクエストしてJSONデータ取得、オブジェクト変換して1件目のデータを実行ログに出力するサンプルコードは以下の通りです。

Google Apps Script(GAS)で花粉観測システムはなこさんのAPIを取得し、ログ出力するサンプルコード

function getPollen() {
//花粉APIのリクエストURLを定義
let apiUrl = "https://kafun.env.go.jp/hanako/api/data_search?";
//花粉APIで取得する年月を2021年3月を設定
let month = "202103";
//花粉APIのURLにリクエストするURLパラメータを設定
apiUrl += "Start_YM=" + month + "&End_YM=" + month + "&TDFKN_CD=13";
//実際に花粉APIにリクエストしてJSONデータを取得し、オブジェクトに変換
let response = UrlFetchApp.fetch(apiUrl).getContentText("Shift-JIS");
let json = JSON.parse(response);
//取得した花粉情報で1つ目をログ出力
console.log(json[0]);
}

このGASサンプルコードを実行すると、2021年3月1日午前1時の東京・小平観測所における花粉データが出力されます。

Google Apps Script(GAS)で花粉観測システムはなこさんの花粉APIを取得した結果、実行ログに取得結果が表示

このようにして、GASで花粉APIにリクエストして、花粉情報のデータを取得することができました。

スプレッドシートに花粉APIのデータを出力するコード

さらに、花粉APIで取得した花粉飛沫の情報や、気温や風量といったデータも含め、スプレッドシートに出力するGoogle Apps Scriptのコードも紹介します。

先ほどのスクリプトを改良し、スプレッドシート上で、都道府県コードや取得開始月と取得終了月を指定して、スプレッドシートに出力します。

Google Apps Script(GAS)で花粉観測システムはなこさんのAPIで花粉情報を取得し、スプレッドシートに花粉飛沫量や気温・風量・風向を書き込むサンプルコード

function outputPollen() {
//コンテナバインドでアクティブなシートを読み込み
let mySheet = SpreadsheetApp.getActiveSheet();
//都道府県コード、観測数、開始月、終了月を取得(観測数は今回は使用しない)
let param = mySheet.getRange(1,2,1,4).getValues();
//花粉APIにリクエストするURLパラメータを設定
let apiUrl = "https://kafun.env.go.jp/hanako/api/data_search?";
apiUrl += "Start_YM=" + param[0][2] + "&End_YM=" + param[0][3] + "&TDFKN_CD=" + param[0][0];
//APIにHTTPリクエストしてjson取得※文字コードはShift-JIS
let response = UrlFetchApp.fetch(apiUrl).getContentText("Shift-JIS");
let json = JSON.parse(response);
//今回は観測所が2つなので、2つの変数を定義
let pollenData1 = [];
let pollenData2 = [];
//jsonのデータ行数分、繰り返し処理でデータを変数に格納
for(i=0;i<json.length;i++){
if(i<json.length/2){
//観測所>取得日時の順番でソートされているので、1つ目の観測所データを変数に格納
pollenData1[i] = [
json[i]["SKT_NNGP"] + json[i]["SKT_HH"],
json[i]["KFN_NUM"],
json[i]["AMeDAS_WD"],
json[i]["AMeDAS_WS"],
json[i]["AMeDAS_TP"],
json[i]["AMeDAS_PR"]
];
}else{
//次に2つ目の観測所データを変数に格納
pollenData2[i-json.length/2] = [
json[i]["SKT_NNGP"] + json[i]["SKT_HH"],
json[i]["KFN_NUM"],
json[i]["AMeDAS_WD"],
json[i]["AMeDAS_WS"],
json[i]["AMeDAS_TP"],
json[i]["AMeDAS_PR"]
];
}
}
//スプレッドシートに2次元配列に格納した花粉データを書き込み
mySheet.getRange(4,1, pollenData1.length, pollenData1[0].length).setValues(pollenData1);
mySheet.getRange(4,7, pollenData2.length, pollenData2[0].length).setValues(pollenData2);
}

今回も東京都のデータで、小平観測所と新宿第二庁舎の花粉飛沫量データを取得し、スプレッドシートに書き込みます。

花粉APIのデータ仕様で説明した通り、JSONデータの順番は、観測所>日時の順番でソートされています。

そのため、取得したJSONデータの前半が小平観測所、後半が新宿第二庁舎の数値になっているため、そのデータの並びに従って、データを変数に格納し、スプレッドシートに書き込みます。

環境省の花粉観測システムはなこさんのAPIにGoogle Apps Script(GAS)でリクエストしたデータをスプレッドシートに書き込んで記録

実際にスプレッドシートに東京の花粉データを出力することができました。

今回のサンプルコードを使えば、花粉情報が更新されるタイミングでリアルタイムで取得し、花粉飛沫量が一定量を超えた場合は、メールやSlackに注意喚起の通知を出すツールにも応用できます。

環境省の花粉APIは取得可能期間に注意

なお、環境省の花粉APIを利用する際には、注意点として取得可能期間が挙げられます。

花粉APIは、いつでも情報を取得できるわけではなく、毎年以下の期間のみ花粉飛沫データが取得できます。

2月1日~6月30日

7月以降を取得しようと"202107″などをパラメータに指定しても、JSONデータは返却されるものの、花粉飛沫数は0になっています。

そのため、主にスギ花粉が発生する時期しか花粉情報を利用することができないのが注意点です。

また、取得できるのは直近一年のデータで、例えば2021年の場合、2020年のデータが取得できません。

このようにAPIが動作するシーズンと取得できるデータの期間については理解しておく必要があります。

まとめ・終わりに

今回、環境省の花粉観測システムはなこさんのAPIをGoogle Apps Script(GAS)で利用する方法を紹介しました。

はなこさんの花粉APIは無料で利用でき、全国各地の花粉飛沫量を入手することができます。

花粉APIのリクエスト方法もHTTP-GETで手軽にJSON形式で花粉情報を取得可能です。

実際にGASのサンプルコードで花粉APIから花粉情報を取得する方法とスプレッドシートに書き込む方法を解説しました。

花粉データを使えば、花粉量が多い時にアラートを出したり、花粉情報を提供するアプリケーションなども作成できます。

個人での利用の場合は登録不要で花粉情報を無料利用ができるので、ぜひ花粉アプリ開発したい際には利用しましょう。