====
気象庁が配信する緊急地震速報(以下EEW)をインターネット経由で再配信するサービスからのメッセージを受信し内容を解釈するプログラム用のライブラリです。
import quakealert
client = quakealert.QAClient('配信サーバーのIPアドレス', ポート番号)
クライアント側で複数のIPアドレスが設定されていて、そのどれかを選ぶ必要がある場合は以下の記述が可能です。
client = quakealert.QAClient('配信サーバーのIPアドレス', ポート番号,
srcaddr='接続元のIPアドレス')
生成したクライアントエンティティのprocess()メソッドを呼び出すことで受信したメッセージを取得できます。
while(1):
mesg = client.process()
<何らかのプロセス>
受信メッセージをquakealert.QAalert()メソッドで処理することでalertオブジェクトを生成します。
if mesg is None:
continue
alert = quakealert.QAlert(mesg)
alertオブジェクトには以下のメソッドがあります。
- alert.timestamp(): EEWのタイムスタンプを出力
- alert.is_effective(): 有効電文なら真
- alert.is_test_message(): テスト電文なら真
- alert.is_decode_message(): デコード電文なら真
- alert.is_code_message(): コード電文なら真
- alert.printable_decode_message(): デコード電文を出力可能な文字列に変換して出力
- alert.code_messag(): コード電文を出力
コード電文をquakealert.Parser()メソッドで処理することで、パースしてプログラムで処理しやすい辞書形式に変換します。
if alert.is_code_message():
buf = alert.code_message()
pmesg = quakealert.Parser(alert.message_type, buf)
pmesgオブジェクトには以下のメソッドがあります。
- pmesg.is_first(): 第一報なら真
- pmesg.is_last(): 最終報なら真
- pmesg.dump(): 辞書形式のオブジェクトを出力します
dump()で出力される辞書形式のオブジェクトdの構造は以下の通りです。
- d['message_type'] EEWメッセージ形式
- d['id'] EEWメッセージの識別子
- d['timestamp'] EEWメッセージのタイムスタンプ
- d['is_last'] 最終報なら真
- d['is_first'] 第一報なら真
- d['alert_seq'] 第N報
- d['location_code'] 震源位置のコード番号
- d['location_str'] 震源位置の文字列情報(別途位置情報辞書が必要)
- d['geo'] 震源位置の緯度経度情報
- d['depth'] 震源の深さ
- d['magnitude'] 地震のマグニチュード
- d['max_seismic'] 予想最大震度
- d['area'] エリア情報
- d['rk'] rk情報(未実装)
- d['rc'] rc情報(未実装)
- d['ebi'] ebi情報(未実装)
====
quakealertライブラリを使ったシンプルなクライアントのサンプルです。
以下の機能があります。
- EEW配信サーバーにつなげる
- EEW配信サーバーからのヘルスチェックリクエストに答えてコネクションを維持する
- 電文がきたら処理して適当にログファイルに書き出す
配信サーバーと接続できる設定がされたPCで
def daemon_process():
client = quakealert.QAClient('<server IP addr>', <server port>)
部分の配信サーバーのIPアドレスとポート番号を埋めて実行してください。
デーモン化して/tmp以下にログファイルを出力します。標準出力にはなにもださないので
/tmp/qa-demo.out
を参照してください。
Wed, 30 Oct 2013 21:15:46 INFO connected
Wed, 30 Oct 2013 21:16:00 INFO Health Check request: acked
と出ていればサーバーとのコネクションが確立されています。接続できないときはローカルの設定および配信サービス側の設定をご確認ください。
DaemonContextライブラリが無いときはpipもしくはeasy_installで"python-daemon"をインストールした上でご利用ください。
====
python2.7での動作を確認しています。
以下の緊急地震速報配信サービスとの接続を確認しています。
- 株式会社インターネットイニシアティブ
2013/10/31 公開開始
Yojiro UO yuo@nui.org
====
本パッケージのソフトウェアのライセンス形態はBSD AS-ISです。 各ファイルの冒頭のライセンスをご確認ください。
Copyright (c) 2012, 2013 Yojiro UO yuo@nui.org
Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
====
ソフトウェア制作者(以下乙)は、利用者が本ライブラリおよび付随するサンプルアプリケーションならびに本ライブラリで記述されたアプリケーションやこれに付随する一切の資料を使用したこと又は使用できなかったことから生じる一切の損害(利益の逸失、ビジネスの中断、情報の消失・毀損などによる損害を含みますが、これらに限定されません)に関しては、たとえ乙が、そのような損害が生じる可能性を知らされていた場合であったとしても、一切責任を負いません。国や地域によっては強行法規によって付随的又は間接損害に対する責任の制限が認められないことがありますので、その場合には、かかる責任制限は適用されないことがあります。なお、いかなる場合においても、本ソフトウェアに関する乙の責任は、利用者が乙に対して支払った金額を超えないものとします。
本項目は各ソースコードの冒頭のコピーライト表現に付随する記述より優先します。