ホーム  •  ニュース  •  フォーラム  •  アカウント情報  •  サイト内検索  •  新規登録
 ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
 カウントダウンブロック
カウントダウンイベントはありません
 メニュー

メイン
   地球科学のための R
     気象庁電子閲覧室からのデータのダウンロード
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
投稿日時: 2005-10-7 18:28
登録日: 2004-7-29
居住地: 地球
投稿: 303
気象庁電子閲覧室からのデータのダウンロード
気象庁では、電子閲覧室で地上気象観測データの公開をしている。しかし、タブをクリックしてダウンロードを繰り返す作業は、必ずしも楽ではない。そこで、一気にデータをダウンロードすることを考えたくなる。

しかも、ダウンロードしたものを R で扱うとなると、多少のデータの変更が必要になる。そうした要望に応えて、第1弾の bash script を。w3m があれば、Linux など、UNIX 環境であれば大抵動くでしょう。

パラメタは for 等で回して下さい。

※ 早速変更 2005-10-07 18:50
※ 早速変更 2005-10-07 19:00 データのヘッダに座標を入れる。
※ また変更 2005-10-07 19:24 風向の数量化。 冗長だが、ダウンロードが律速なので。
※ 更に変更 2005-10-07 19:30 データの種類を # の後に入れる。scan() の時に comment.char="#" を入れれば、この行はスキップされる。
※ より変更 2005-10-31 13:02 引数チェックを正し、background 処理を止める。月も一桁で与えても良いようにする。
※ 再度変更 2005-10-31 15:16 一時ファイルを使わないように変更。wget も使わないようにした。
※ 恥ずかしい間違いを修正 ( WE-> NW)


#! /bin/bash
##############################
#
# Arguments :
#                           1        2          3    4    5     6
#            DownLoadAMeDAS datatype prefecture spot year month [day]
#
#            # "day" and "month"should be represented by two digits
#
# Data Type :
#            1 : daily
#            2 : monthly
#
##############################
function printusage
{
    echo "Description:"
    echo ""
    echo "       Download surface data from Denshi-Etsuran-Shitu"
    echo ""
    echo "Usage:"
    echo "       DownLoadAMeDAS   datatype   prefecture   spot   year   month  [day]"
    echo ""
    echo "               ** datatype"
    echo "                      1: hourly data for one day"
    echo "                      2: daily data  for one month"
    echo "               ** prefecture"
    echo "                         expressed by two digits (ex. 13 is for TOKYO)"
    echo "                         prefecture might not be required"
    echo "               ** spot"
    echo "                         expressed by five digits (ex. 44076 is for Nerima)"
    echo "               ** year"
    echo "                         should be four digits"
    echo "               ** month"
    echo "                         should be digits (ex. 8 or 08 for Aug.)"
    echo "               ** day"
    echo "                         should be omitted if datatype=2 (daily data)"
    echo ""
}

##############################

if [ $# -eq 6 ]; then
    if [ $1 -eq 1 ]; then
	day=$6
	ID="時"
	HD=`echo -n " $3  $4  $5  $6  "`
	OUTHD="$1$3$4$5$6"
    else
	printusage
	exit 99;
    fi
elif [ $# -eq 5 ]; then
    if [ $1 -eq 2 ]; then
	day='00'
	ID="日"
	HD=`echo -n " $3  $4  $5  "`
	OUTHD="$1$3$4$5"
    else
	printusage
	exit 99
    fi
else
    printusage
    exit 99
fi

##############################

lenmonth=`echo $5 | wc -c`
if [ $lenmonth -eq 2 ]; then
    monthnum="0"$5
else
    monthnum=$5
fi

##############################

URLHEAD="http://www.data.kishou.go.jp/meteo/cgi-bin/search.cgi"

#
# Header
#
PHD=`w3m "${URLHEAD}?frame=1&graph=0&prefecture=$2&observation=0&spot=$3&data=$1&year=$4&month=${monthnum}&day=$6&mode=0"  | \
    nkf -e | \
    grep 北緯 | \
    sed 's/.*北緯\([0-9]*\)度\([0-9\.]*\)分/経度:東経\([0-9]*\)度\([0-9\.]*\)分.*/\1 \2 \3 \4/' | \
    awk '{print $1+$2/60, $3+$4/60, ENVIRON[HD];}' `
#
# Body
#
w3m "${URLHEAD}?frame=2&graph=0&prefecture=$2&observation=0&spot=$3&data=$1&year=$4&month=${monthnum}&day=$6&mode=0" | \
                                    # 空行削除
    sed '/^│[ ]*│/D' | \
    sed 's/[└┘─│┌┐]//g' | \
	                            # データのある行を抽出
    grep "\(^[ 0-9]*[0-9]${ID}\)\|\(気温\)" | \
    grep -v "平均気温" | \
                                    # 書式の変更
    sed "s/\(^.*気温.*\)/#  x   y   spot  year month day (hour)\1/" | \
    sed "s/\([0-9][0-9]*\)${ID}/${HD}\1/" | \
                                    # 風向の変換
    sed 's/静穏/C /' | \
    sed 's/東/E/g' | \
    sed 's/西/W/g' | \
    sed 's/南/S/g' | \
    sed 's/北/N/g' | \
    sed 's/ C   /  C -1 /g' | \
    sed 's/ N   / N  0 /g' | \
    sed 's/ NNE / NNE  1 /g' | \
    sed 's/ NE  / NE  2 /g' | \
    sed 's/ ENE / ENE  3 /g' | \
    sed 's/ E   / E  4 /g' | \
    sed 's/ ESE / ESE  5 /g' | \
    sed 's/ SE  / SE  6 /g' | \
    sed 's/ SSE / SSE  7 /g' | \
    sed 's/ S   / S  8 /g' | \
    sed 's/ SSW / SSW  9 /g' | \
    sed 's/ SW  / SW 10 /g' | \
    sed 's/ WSW / WSW 11 /g' | \
    sed 's/ W   / W 12 /g' | \
    sed 's/ WNW / WNW 13 /g' | \
    sed 's/ NW  / NW 14 /g' | \
    sed 's/ NNW / NNW 15 /g' | \
                                    # NA の変換
    sed 's/\/\/\//NA/g' | \
                                    # 先頭に座標を
    sed "s/^\([^#]*\)\$/${PHD} \1/" | \
    cat > ${OUTHD}.txt 
投稿日時: 2005-10-31 13:05
登録日: 2004-7-29
居住地: 地球
投稿: 303
Re: 気象庁電子閲覧室からのデータのダウンロード
元記事と記事中のプログラムを更新しました。
投稿日時: 2006-1-5 19:09
登録日: 2004-7-29
居住地: 地球
投稿: 303
Re: 気象庁電子閲覧室からのデータのダウンロード
似た発想のページを発見。

ここ。

perl のモジュールにしているところが凄い。今度じっくり拝見します。このページにあるように、過大なアクセスは業務妨害になる可能性がありますね。要注意!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


WWW を検索 meteorology.jp を検索

Powered by XOOPS 2.0 © 2001-2006 The XOOPS Project, Maitained by A. Mori
FI Theme :: XOOPS 2 Theme by ImageSquare :: Costomized by matchan and A.Mori