高度利用者向け緊急地震速報の電文を扱う為のライブラリeew_parser

ウェザーニューズなどから受信した高度利用者向け緊急地震速報の電文を扱う為のRubyライブラリを書きました。
https://github.com/Glasssaga/eew_parser

require "eew_parser"

str = <<EOS # 緊急地震速報の電文
37 03 00 110415233453 C11
110415233416
ND20110415233435 NCN005 JD////////////// JN///
251 N370 E1408 010 66 6+ RK66324 RT01/// RC13///
EBI 251 S6+6- ////// 11 300 S5+5- ////// 11 250 S5+5- ////// 11
310 S0404 ////// 11 311 S0404 ////// 11 252 S0404 ////// 11
301 S0404 ////// 11 221 S0404 ////// 01 340 S0404 ////// 01
341 S0404 ////// 01 321 S0404 233455 00 331 S0404 233457 10
350 S0404 233501 00 360 S0404 233508 00 243 S0403 ////// 01
330 S0403 233454 00 222 S0403 233455 00
9999=
EOS

fc = EEWPaser.new(str)

puts <<EOS
電文種別コード: #{fc.type}
発信官署: #{fc.from}
訓練等の識別符: #{fc.drill_type}
電文の発表時刻: #{fc.report_time}
電文がこの電文を含め何通あるか: #{fc.number_of_telegram}
コードが続くかどうか: #{fc.continue?}
地震発生時刻もしくは地震検知時刻: #{fc.earthquake_time}
地震識別番号: #{fc.id}
発表状況(訂正等)の指示: #{fc.status}
発表する高度利用者向け緊急地震速報の番号(地震単位での通番): #{fc.number}
震央地名コード: #{fc.epicenter}
震央の位置: #{fc.position}
震源の深さ(単位 km)(不明・未設定時,キャンセル時:///): #{fc.depth}
マグニチュード(不明・未設定時、キャンセル時:///): #{fc.magnitude}
最大予測震度(不明・未設定時、キャンセル時://): #{fc.seismic_intensity}
震央の確からしさ: #{fc.probability_of_position}
震源の深さの確からしさ: #{fc.probability_of_depth}
マグニチュードの確からしさ: #{fc.probability_of_magnitude}
震央の確からしさ(気象庁の部内システムでの利用): #{fc.probability_of_position_jma}
震源の深さの確からしさ(気象庁の部内システムでの利用): #{fc.probability_of_depth_jma}
震央位置の海陸判定: #{fc.land_or_sea}
警報を含む内容かどうか: #{fc.warning?}
最大予測震度の変化: #{fc.change}
最大予測震度の変化の理由: #{fc.reason_of_chaage}
EOS
fc.ebi.each do |local|
  puts "地域コード: #{local[:area_cord]} 最大予測震度: #{local[:intensity]} 予想到達時刻: #{local[:arrival_time]}"
  puts "警報を含むかどうか: #{local[:warning]} 既に到達しているかどうか: #{local[:arrival]}"
end

このようなコードを書くと、

電文種別コード: マグニチュード、最大予測震度及び主要動到達予測時刻の高度利用者向け緊急地震速報(グリッドサーチ法、EPOS自動処理手法)
発信官署: 東京
訓練等の識別符: 通常
電文の発表時刻: 2011-04-15 23:34:53 +0900
電文がこの電文を含め何通あるか: 1
コードが続くかどうか: true
地震発生時刻もしくは地震検知時刻: 2011-04-15 23:34:16 +0900
地震識別番号: 20110415233435
発表状況(訂正等)の指示: 通常発表
発表する高度利用者向け緊急地震速報の番号(地震単位での通番): 5
震央地名コード: 福島県浜通り
震央の位置: N37.0 E140.8
震源の深さ(単位 km)(不明・未設定時,キャンセル時:///): 10
マグニチュード(不明・未設定時、キャンセル時:///): 6.6
最大予測震度(不明・未設定時、キャンセル時://): 6強
震央の確からしさ: 防災科研システム(5点以上)[防災科学技術研究所データ]
震源の深さの確からしさ: 防災科研システム(5点以上)[防災科学技術研究所データ]
マグニチュードの確からしさ: 全点P相(最大5点)[気象庁データ]
震央の確からしさ(気象庁の部内システムでの利用): テリトリー法(2点)[気象庁データ]
震源の深さの確からしさ(気象庁の部内システムでの利用): グリッドサーチ法(5点)[気象庁データ]
震央位置の海陸判定: 陸域
警報を含む内容かどうか: true
最大予測震度の変化: 最大予測震度が1.0以上大きくなった
最大予測震度の変化の理由: M及び震源位置が変化したため
地域コード: 福島県浜通り 最大予測震度: 6弱から6強 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 茨城県北部 最大予測震度: 5弱から5強 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 福島県中通り 最大予測震度: 5弱から5強 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 栃木県北部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 栃木県南部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 福島県会津 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 茨城県南部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: true 既に到達しているかどうか: true
地域コード: 宮城県南部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: false 既に到達しているかどうか: true
地域コード: 千葉県北東部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: false 既に到達しているかどうか: true
地域コード: 千葉県北西部 最大予測震度: 4 予想到達時刻:
警報を含むかどうか: false 既に到達しているかどうか: true
地域コード: 群馬県南部 最大予測震度: 4 予想到達時刻: 2011-04-15 23:34:55 +0900
警報を含むかどうか: false 既に到達しているかどうか: false
地域コード: 埼玉県南部 最大予測震度: 4 予想到達時刻: 2011-04-15 23:34:57 +0900
警報を含むかどうか: true 既に到達しているかどうか: false
地域コード: 東京都23区 最大予測震度: 4 予想到達時刻: 2011-04-15 23:35:01 +0900
警報を含むかどうか: false 既に到達しているかどうか: false
地域コード: 神奈川県東部 最大予測震度: 4 予想到達時刻: 2011-04-15 23:35:08 +0900
警報を含むかどうか: false 既に到達しているかどうか: false
地域コード: 山形県置賜 最大予測震度: 3から4 予想到達時刻:
警報を含むかどうか: false 既に到達しているかどうか: true
地域コード: 埼玉県北部 最大予測震度: 3から4 予想到達時刻: 2011-04-15 23:34:54 +0900
警報を含むかどうか: false 既に到達しているかどうか: false
地域コード: 宮城県中部 最大予測震度: 3から4 予想到達時刻: 2011-04-15 23:34:55 +0900
警報を含むかどうか: false 既に到達しているかどうか: false

こんな風に解析してくれます。

gem install eew_parser

でインストールできます。
詳しくはドキュメントを参照して下さい。