概要
これまで気象庁の気象データはスクレイピングをすることでしか得られませんでしたが、1カ月ほど前に気象庁HPがAPI化した(気象庁のHPで利用されているものではあるが、公式に提供されているものではないため、アップデート等により使用不可になる可能性もあります。)ということで早速使っていこうと思います。
今回作成するものは
- 気象庁HPからAPIで天気予報データを取得
- 雨の日だけLINE Notifyで通知
というシンプルなもので、GoogleAppsScriptを使って実装していきます。
気象庁のAPI
まず、気象庁のAPIの仕様を把握する必要があります。この記事が詳しいです。
なお、これはF12を押すと表示されるデベロッパーツールで見ることもできて、Chromeの場合は以下のように見ることができます。
- 取得したい情報が表示されているページを開く
- F12
- Network
- リロード(ctrl+R or F5)
- XHRを選択し、順番に見ていく
- Preview表示する
このときNameのところのアドレスがエンドポイントです。
GASで処理
GASでapiを利用する際は以下のように記述します。
let response = UrlFetchApp.fetch("https://www.jma.go.jp/bosai/forecast/data/forecast/120000.json");
let response_json = JSON.parse(response.getContentText());
responce_jsonの中身を見てほしい情報をたどってください。
let weather = response_json[0]["timeSeries"][0]["areas"][0]["weathers"][0];
weather = weather.replace(/ /g, "");
let rainy_percent = response_json[0]["timeSeries"][1]["areas"][0]["pops"];
rainy_percent = rainy_percent.slice(0, 4);
降水確率が高いかどうかの条件分岐とLINEで送りたい文字を決めていきます
if (rainy_percent.filter(element => element >= 50).length == 0){
return
}
let text =
`\n今日の天気:${weather}
降水確率: 6時-\t${rainy_percent[0]}%
12時-\t${rainy_percent[1]}%
18時-\t${rainy_percent[2]}%`
sendLINE(text)
LINE Notifyに通知
まずは、LINEのトークンを取得する必要があります。以下の記事が詳しいです。
取得したらコードは単純です。コピペして先ほど取得したトークンの部分だけ書き換えればいいです。
function sendLINE(text) {
let messageText = text
let token = "先ほど取得したトークン"
let options = {
"method" : "post",
"headers" : {
"Authorization" : "Bearer "+ token
},
"payload" : {
"message" : messageText
}
}
let url = "https://notify-api.line.me/api/notify"
UrlFetchApp.fetch(url, options)
}
GASで定期実行
以下の記事が参考になると思います。
こんな感じで設定すれば毎朝定期実行して、降水確率が高い日だけ通知してくれます。
実際に通知が来ました!