ruby-robotの夢

cygwin-ruby,qgisの達人を目指す奮闘記

世界の雨のダウンロード

気象庁の世界の天気情報を見られるClimatView ツールというサイトがある。
気象庁|世界の天候データツール(ClimatView 日別値)
ここには、過去5年分程度の速報値が出ているようだが、これをダウンロードしてみた。
※後日談 ここに表示されるデータは、WMOのGTSに基づいてNOAAに収集される世界のデータである。これは、NOAAのHPから、まとめてダウンロードすることができる。その方が、早いだろう。

#!/usr/bin/python
import requests
from bs4 import BeautifulSoup
import sys
import datetime
from itertools import chain
 
wordsets=list(sys.argv)[1:1000]

#--------------------
kikans=[[[2021,9,1],[2021,10,31]] ] #id
reg="6" #south-east asia and oseania
nfo="jma_world_climate_id.txt" #indonesia
#--------------------
#kikans=[[[2018,5,1],[2018,6,30]],[[2020,10,1],[2020,10,31]]] #kh&vt
#reg="0" #asia and siberia
#nfo="jma_world_climate_khvt.txt" #kambodhia & vietnum
#--------------------
#["https://www.data.jma.go.jp/cpd/monitor/dailyview/list.php?r=0&y=2023&m=8&d=21&s=1&e=3&k=1"]
def uts(d01): #date_range->uts
		d0=d01[0]
		d1=d01[1]
		s0=datetime.datetime(d0[0],d0[1],d0[2],0,0,0).timestamp()
		print(s0)
		s1=datetime.datetime(d1[0],d1[1],d1[2],0,0,0).timestamp()
		print(s1)
		ss=list(range(int(s0),int(s1),86400))
		return ss
def utime2date(ut): #uts->[y,m,d]
		date=datetime.datetime.fromtimestamp(ut)
		ymd=[date.year,date.month,date.day]
		return ymd
def ymd2url(ymd): #[y,m,d]->url
                y,m,d=ymd
		url="https://www.data.jma.go.jp/cpd/monitor/dailyview/list.php?r="+reg+"&y=" + str(y) +"&m=" + str(m) + "&d=" + str(d) + "&s=1&e=3&k=1" 
		return url
uts=chain.from_iterable( map(uts,kikans) )
urls=list(map(ymd2url,map(utime2date,uts)))
#--------------------
fo=open(nfo,mode="w")

for url in urls:
		print("ws",url)
		res = requests.get(url,timeout=(3.0,7.5))
		soup = BeautifulSoup(res.content, "html.parser")
		tbl=list(soup.select("table") )[0]
		h2=list(soup.select("h2") )[0].text
		trs=tbl.select("tr")
		for j,tr in enumerate(trs): #table_rows
				tds=tr.select("td")
				if j>=1: #without head
						st,cntry,tav,tmx,tmn,r=[e.text for e in tds]
						print(h2,st,cntry,tav,tmx,tmn,r,file=fo,sep="\t")