解析でAMeDASのデータを使いたいので、こちらのページで紹介されている気象庁のAMeDASデータの取得を参考に、データを自動取得するシェルスクリプトを作成してみました。
おそらく気象庁さんのサーバーには負担をかけているのだと思いますが...
BioEosさんのページではRubyを使っているのですが、私がRubyに不心得なのでシェルスクリプトで同様の作業を行います。
必要なのはw3mとawkなどなどですが、わりと簡単にできました。
まずはprec_noの取得
こちらのページを参考に。
が、しかし................
実は正規表現がとっても苦手なもので、ここでは小癪にもsedとawkを多用しています....(汗)
そしたら次はblock_noの取得。
取得したprec_noを使って
お恥ずかしながら、ここでもsedとawkを多用しています....(汗)
prec_noとblock_noが取得できたので、いよいよデータをダウンロードします。
w3mでページを表示して、grepで表の部分だけを抽出するという単純なものです。
こちらはアメダス全ポイントの日々のデータをゲットするコード
同様にURLを変更すると月々データもゲットできます。
当然、時間ごとも可能。
おそらく気象庁さんのサーバーには負担をかけているのだと思いますが...
BioEosさんのページではRubyを使っているのですが、私がRubyに不心得なのでシェルスクリプトで同様の作業を行います。
必要なのはw3mとawkなどなどですが、わりと簡単にできました。
まずはprec_noの取得
こちらのページを参考に。
- w3m -dump_source 'http://www.data.jma.go.jp/obd/stats/etrn/select/prefecture00.php?prec_no=&prec_ch=&block_no=&block_ch=&year=&month=&day=&elm=&view=' | grep prec_no | sed 's/=/ /g' | sed 's/&/ /'g | awk '{print $10}' | grep ^[1-9] | tr '\n' ' ' > prec_no.dat
が、しかし................
実は正規表現がとっても苦手なもので、ここでは小癪にもsedとawkを多用しています....(汗)
そしたら次はblock_noの取得。
取得したprec_noを使って
- for i in `cat prec_no.dat`
- do
- w3m -dump_source 'http://www.data.jma.go.jp/obd/stats/etrn/select/prefecture.php?prec_no='${i} | grep onmouseover= | sed 's/,/ /g' | sed 's/(/ /g' | sed 's/)/ /g' | sed "s/'//g" | awk '{print "'${i}'", $2, $3, $4, $5, $6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19}' | uniq | sed 's/;"//g' >> prec.dat
- done
お恥ずかしながら、ここでもsedとawkを多用しています....(汗)
prec_noとblock_noが取得できたので、いよいよデータをダウンロードします。
w3mでページを表示して、grepで表の部分だけを抽出するという単純なものです。
こちらはアメダス全ポイントの日々のデータをゲットするコード
- for ((i=1; i< 1639; i++))
- do
- prec=`awk 'NR=='$i'{print $1}' prec.dat`
- type=`awk 'NR=='$i'{print $2}' prec.dat`
- block=`awk 'NR=='$i'{print $3}' prec.dat`
- mkdir -p ./da/$prec/$block
- for ((j=1980; j<2000; j++))
- do
- for k in 01 02 03 04 05 06 07 08 09 10 11 12
- do
- cd ./da/$prec/$block
- w3m 'http://www.data.jma.go.jp/obd/stats/etrn/view/daily_'${type}'1.php?prec_no='${prec}'&block_no='${block}'&year='${j}'&month='${k}'&day=&elm=daily&view=p1' | grep ^[1-9] > ${prec}_${block}_${j}_${k}.dat
- s=`du ${prec}_${block}_${j}_${k}.dat | awk '{print $1}'`
- case $s in
- 0)
- rm ${prec}_${block}_${j}_${k}.dat
- ;;
- esac
- echo $block $type $prec $i $j $k
- cd ../../../
- done
- done
- done
同様にURLを変更すると月々データもゲットできます。
当然、時間ごとも可能。
- for ((i=1; i< 1639; i++))
- do
- prec=`awk 'NR=='$i'{print $1}' prec.dat`
- type=`awk 'NR=='$i'{print $2}' prec.dat`
- block=`awk 'NR=='$i'{print $3}' prec.dat`
- mkdir -p ./mo/${prec}/${block}
- for ((j=1980; j<2000; j++))
- do
- cd ./mo/${prec}/${block}
- w3m 'http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_'${type}'1.php?prec_no='${prec}'&block_no='${block}'&year='${j} | grep ^[1-9] > ${prec}_${block}_${j}.dat
- s=`du ${prec}_${block}_${j}.dat | awk '{print $1}'`
- case $s in
- 0)
- rm ${prec}_${block}_${j}.dat
- ;;
- esac
- echo $block $type $prec $i $j
- cd ../../../
- done
- done