LoginSignup
33
43

More than 3 years have passed since last update.

気象庁のAPIを使った雨の日だけ通知してくれるLINE Notifyの作成

Last updated at Posted at 2021-04-11

概要

これまで気象庁の気象データはスクレイピングをすることでしか得られませんでしたが、1カ月ほど前に気象庁HPがAPI化した(厳密なAPIではないらしい)ということで早速使っていこうと思います。

今回作成するものは

  1. 気象庁HPからAPIで天気予報データを取得
  2. 雨の日だけLINE Notifyで通知

というシンプルなもので、GoogleAppsScriptを使って実装していきます。

気象庁のAPI

まず、気象庁のAPIの仕様を把握する必要があります。この記事が詳しいです。

なお、これはF12を押すと表示されるデベロッパーツールで見ることもできて、Chromeの場合は以下のように見ることができます。

  1. 取得したい情報が表示されているページを開く
  2. F12
  3. Network
  4. リロード(ctrl+R or F5)
  5. XHRを選択し、順番に見ていく
  6. Preview表示する

image.png

このとき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で定期実行

以下の記事が参考になると思います。

こんな感じで設定すれば毎朝定期実行して、降水確率が高い日だけ通知してくれます。

image.png

実際に通知が来ました!

image.png

参考文献

33
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
43