プログラムと電子工作の置き場、たまにコラム

日々のスニペットやMaker's系のプログラムを置いてきます。

緊急地震速報の受信端末を作る (3)コーディング編

利用規約的にOKの範囲なのかわからないのですが、Wather Newsの緊急地震速報(EEW)をTwitterでツィートしてるアカウントがいます。以下のようなデータ形式Twitterに投稿されます。

f:id:yuriai0001:20190107121104p:plain
eew_from_twitter

遅延時間のチェック

Twitterにツィートされるまでの時間を確認したかったので気象庁のサイトより緊急地震速報のデータを閲覧する。
このデータによると19時21分33.9秒に地震波を検出して、第一報が41.1秒、そして最終の第七報が22分21.3秒に送信されてます。

f:id:yuriai0001:20190107121146p:plain
eew_time

Twitterの投稿で秒数まで確認したい場合は、Twitter社で使われているStatus ID発行のアルゴリズムから逆算します。
github.com


Twitterへの投稿は第一報告が19時21分41秒、第三報が19時21分44秒と出ましたので、Twitter投稿によるレイテンシーは考えなくてよいという結果を得ることができました。

投稿内容をParseする

RubyTwitter Gemを使ってloopでTwitterへの投稿を取得。
StatusIDをチェックして前回取得時のものからIDが違うとスレッドを生成して内容をパースします。
gist.github.com

緊急地震速報を配信する

MQTTのようなプロトコルの方がIoTデバイス向けような気がしますが、現状HTTPを利用します。将来的にユーザーが増えることも考えて一応オブザーバーパターンを導入します。Observerはユーザーで、Subjectにeewを配信するmailmanというクラスを作成します。

gist.github.com


github.com


追記2018年8月
User Streams APIが廃止されたことによってTwitterによる提供を行なっていた緊急地震速報(EEW)が停止してしまいました。😫