ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

アメダスのデータをGetする

(2022-02-17 初稿 - )

気象庁アメダスのデータ(CSV)をダウンロードするのは、以下のサイトからできる。

GUIでとても使いやすいだが、定期的にスクリプトを用いてダウンロードしたり、ある観測地点の現在のデータを知るのには少し不便だ。

そこで、以下のページからWebスクレイピングで、必要なデータ(サンプルとして静岡空港)をいただこうと思ったが、気象庁のサイトが複雑で、素人の筆者には難しくてできなかった。(^^ゞ

他の方法についてネットで検索すると、以下のサイトでjsonでダンロードできるとの記述があった。多謝。m(__)m

実際に試したところ、うまくデータを取得できたので、備忘録として記す。

https://www.jma.go.jp/bosai/amedas/data/map/YYYYMMDDhhmm00.json
YYYYMMDDhhmmは、202202171510等の日付と時刻のデータを入力する。

このURLひとつで、北は宗谷、南は波照間の現在の観測データ(実際には10分程度前)データが一度で手に入れることができるからすごい。

毎回、URLを入力するのも面倒なので、簡単なpythonスクリプトを作った。

このスクリプトは、筆者の近くの静岡空港の直近のデータを取得するが、それぞれ地点のコードを設定すれば、欲しい地点のデータが得られる。

なお、直近と言っても、あまりに直近の場合は、データの登録が完了していなく、エラーになることが多いので、実際には15分程度前で、かつ分数の1の位を切捨てるので、20分程度前のデータを取得する。具体的には、現在時刻が15:25だと、15:10のデータを取得する。

#!/usr/bin/env python3 
#coding: UTF-8
# ver 0.01 Written by Hymd3a

# sample data
#"50477":{"temp":[0.3,0],"humidity":[59,0],"sun10m":[0,0],"sun1h":[0.0,0],"precipitation10m":[0.0,0],"precipitation1h":[0.0,0],"precipitation3h":[0.0,0],"precipitation24h":[0.0,0],"windDirection":[13,0],"wind":[1.2,0]},"50477":{"temp":[1.5,0],"precipitation10m":[0.0,0],"precipitation1h":[0.0,0],"precipitation3h":[0.0,0],"precipitation24h":[0.0,0],"windDirection":[11,0],"wind":[4.8,0]},

import json
import requests
import datetime

# wind direction
wd = { 1:"北北東", 2:"北東", 3:"東北東", 4:"東", 5:"東南東", 6:"南東", 7:"南南東", 8:"南", 9:"南南西", 10:"南西", 11:"西南西", 12:"西", 13:"西北西", 14:"北西", 15:"北北西", 16:"北" } 

# functions
def get_rdate():
  # date time now
  dt_now = datetime.datetime.now()
  gdate = dt_now + datetime.timedelta(minutes=-12)  # 現在時刻から12分引く
  gdate = gdate.strftime('%Y%m%d%H%M')              # 時刻を表す文字列に変換
  return gdate[0:11] + "000"                        # 分の1の位と秒を0に

def dt2str(dt):
  return f"{dt[0:4]}-{dt[4:6]}-{dt[6:8]} {dt[8:10]}:{dt[10:12]}"

get_dt = get_rdate()
dt_str = dt2str( get_dt )
#print(get_dt, dt_str)

# get json
jdata = f"https://www.jma.go.jp/bosai/amedas/data/map/{get_dt}.json"
#jdata = "https://www.jma.go.jp/bosai/amedas/data/map/20220217050000.json"
#print(jdata)

df = requests.get(jdata).json()

print('静岡空港', dt_str)
print("温度(℃):", df['50476']['temp'][0])
print("湿度(%):", df['50476']['humidity'][0])
print("日照時間(10m):", df['50476']['sun10m'][0])
print("日照時間(1h):", df['50476']['sun1h'][0])
print("降水量(10m):", df['50476']['precipitation10m'][0])
print("降水量(1h):", df['50476']['precipitation1h'][0])
print("降水量(3h):", df['50476']['precipitation3h'][0])
print("降水量(24h):", df['50476']['precipitation24h'][0])
print("風向:", wd[df['50476']['windDirection'][0]])
print("風速(m/s):", df['50476']['wind'][0])

実行すると、以下のとおり表示される(データは架空)。

静岡空港 2022-02-17 15:10
温度(℃): 3.8<
湿度(%): 46
日照時間(10m): 10
日照時間(1h): 1.0
降水量(10m): 0.0
降水量(1h): 0.0
降水量(3h): 0.0
降水量(24h): 0.0
風向: 西北西
風速(m/s): 2.7

簡単にデータを取得できるからといって、たくさんデータを取ってサーバに負荷を掛けたりしないように。

大量のデータをGetするときは、気象庁の上記サイトから取得するように

関連ページ