2016年10月26日水曜日

新強震モニタから緊急地震速報を手に入れるスクリプト

まあ、あまり賢くない方法です。

これを1秒ごとにloopでぶん回せば
SignalnowExpressっぽい書式で手に入ります。

データ受信:013700110523142212110523142054ND20110523142114906N382E14230105266514










電文発表時刻地震発生時刻地震ID


x報緯度経度震源の深さMフラグ*3/の有無
エリアコード

sed, wget, jq, bcが必要です。

#!/bin/bash

EEWURL="http://www.kmoni.bosai.go.jp/new/webservice/hypo/eew/"`date "+%Y%m%d%H%M%S"`".json"
EQGET=`wget $EEWURL -q -O -`
PRMT=`echo $EQGET | jq -r .result.message`

if [ "$PRMT" = "" ]
        then
        EQR1=(`echo $EQGET | jq -r '.result.status, .report_time, .longitude, .is_cancel, .depth, .is_training, .latitude, .origin_time, .magunitude, .report_num, .report_id, .alertflg'`)
        if [ "${EQR1[0]}" = "success" ]
        then
                EQR2=()
                EQR2+=( 01 )

                if [ "${EQR1[4]}" = "true" ]
                        then
                        EQR2+=( 3910 )
                        EQR2+=( `echo ${EQR1[1]}${EQR1[2]} | sed -e 's/\///g' -e 's/://g' -e 's/^..//'` )
                        EQR2+=( `echo ${EQR1[8]} | sed -e 's/^..//'` )
                        EQR2+=( `echo "ND"${EQR1[11]}"0"` )
                        EQR2+=( `printf %02d ${EQR1[10]}` )
                        EQR2+=( "///////////////////" )
                else
                        EQR2+=( 3X00 )
                        EQR2+=( `echo ${EQR1[1]}${EQR1[2]} | sed -e 's/\///g' -e 's/://g' -e 's/^..//'` )
                        EQR2+=( `echo ${EQR1[8]} | sed -e 's/^..//'` )
                        EQR2+=( `echo "ND"${EQR1[11]}"0"` )
                        EQR2+=( `printf %02d ${EQR1[10]}` )
                        LATI=`echo "scale=0; ${EQR1[7]} * 10" | bc | sed s/\.[0-9,]*$//g`
                        EQR2+=( `echo "N"$LATI` )
                        LNGI=`echo "scale=0; ${EQR1[3]} * 10" | bc | sed s/\.[0-9,]*$//g`
                        EQR2+=( `echo "E"$LNGI` )
                        KM=`echo ${EQR1[5]} |sed -e "s/km//"`
                        EQR2+=( `printf %03d $KM` )
                        MAG=`echo "scale=0; ${EQR1[9]} * 10" | bc | sed s/\.[0-9,]*$//g`
                        EQR2+=( `printf %02d $MAG` )
                        if [ "${EQR1[12]}" = "警報" ]
                        then
                                EQR2+=( XXXXE )
                        else
                                EQR2+=( XXXXX )
                        fi
                fi
                echo ${EQR2[@]} | sed -e 's/ //g'

        fi
fi
~

SignalNowのログをNAS上のファイルに書き出させていろいろしてたので
SignalNowの書式にしてます。

震度演算と猶予時間の計算は完成したらはっつけます…
(S波の速度を求める計算部分がまだ未完成なのでS=4.5km/sでざっくりと仮実装してます)