WebSocket API仕様(津波情報(沖合の津波観測に関する情報)受信者向け)

津波情報について

  • 気象庁は、津波警報・注意報を発表した場合に、津波の到達予想時刻や予想される津波の高さなどの津波情報で発表します。
  • 津波情報には、各地の満潮時刻・津波到達予想時刻や沿岸・沖合で観測した津波の時刻や高さといった情報が含まれています。
  • 本サービスは、気象庁発表の津波情報を用いて沖合の潮位観測所で観測した津波の高さなどをお知らせするものです。

注意事項

  • 本サービスは、津波の発生を予知するものではありません。
  • 本サービスは、気象庁が発表する津波情報の内『沖合の津波観測に関する情報』に含まれる情報(潮位観測所、観測時刻、観測した津波の高さなど)を解析し、通知するものです。
  • 『津波情報:沖合の津波観測に関する情報』に含まれる、沿岸での津波推定値や地震情報は本サービスでは取り扱いません。
    • 津波予報区ごとの津波推定値を利用される場合は、津波速報(tsunami)をご利用ください。
    • 地震情報を利用される場合は、地震情報:震源・震度情報(jmaearthquake_result)をご利用ください。
  • 津波情報についての詳細は、 気象庁のwebサイト でご確認ください。

取り扱い対象データについて

  • 本サービスで取り扱うデータには、「通常報」「訓練報」「試験報」の3つのモード(運用種別)が存在しております。
    データを利用する際は、これらのモードに対して適切な処理を行ってください。
    • 例えば「訓練報」「試験報」モードのデータは利用しない、利用する場合は明らかに 訓練試験 であることが分かるようにするなど、利用者の混乱を避けてください。
    • 「訓練報」「試験報」モードのデータを、「通常報」データであるかのような処理は 行わない でください。
    • モードの誤用によるトラブルについては、弊社は一切の責任を負わないものとします。
  • 取り扱うモードは利用するサーバによって異なります。各サーバで取り扱うモードは、以下の通りといたします。

本番系WebSocketサーバでのAPI利用の場合

  • 本番系WebSocketサーバでは、「通常報」のみを取り扱い、それ以外のモードは取り扱いません。

トライアル/開発系WebSocketサーバでのAPI利用の場合

  • トライアル/開発系WebSocketサーバでは、「通常報」「訓練報」「試験報」の3つのモードを取り扱います。

津波情報の通知について

  • 気象庁が津波情報を発表時に、津波情報の内容から沖合潮位観測所毎の観測した津波の高さなどの情報をWebSocket API経由で通知します。
  • 本サービスでは、気象庁で定義された沖合潮位観測所ごとの津波情報を通知します。
  • 津波を観測していない潮位観測所は、津波情報に含まれません。

WebSocket API 津波情報メッセージ仕様

  • 津波情報:WebSocket API通知メッセージ表

    セクション パラメータ タイプ 設定値 意味 備考
    version   Hash 以下の2パラメータを設定 メッセージのバージョン情報設定セクション  
      common_version String 任意 commonセクションのパラメータバージョン 現在は1のみ対応
      details_version String 任意 detailsセクションのパラメータバージョン 現在は1のみ対応
    common   Hash 以下の4パラメータを設定 メッセージの共通情報設定セクション 以下の4パラメータはバージョン1のもの
      datatype String jmatsunami_offshore メッセージのタイプ  
      msgid String 任意 メッセージ毎の一意な番号  
      sendid String 任意 メッセージの配信元情報  
      senddatetime String YYYY-MM-DD HH:mm:SS+HHmm形式 メッセージの送信時刻  
    details   Array データタイプ毎のパラメータを設定 メッセージの詳細情報設定セクション 津波速報情報を設定します。
  • WebSocket APIからの津波情報通知メッセージ詳細

    • version区(セクション)
      • common_version:common区のバージョンが設定。(現在は"1"のみ利用)
      • details_version:details区(津波情報)のバージョンが設定。(現在は"1"のみ利用)
    • common区(セクション)
      • common_version: "1"は、以下のパラメータを含みます。
        • datatype:津波情報(沖合の津波観測に関する情報)のdatatype名:"jmatsunami_offshore"が設定されます。
        • msgid:津波情報毎の一意な値が設定されます。
        • sendid:津波情報の発信元情報などが設定されます。(例:JMA など)
        • senddatetime:津波情報通知メッセージの送信時刻が設定されます。(YYYY-MM-DD HH:mm:SS+HHmm形式)
    • details区(セクション)

サンプルプログラム

  • html(javascript)

    • WebSocket APIへの接続と認証および津波情報メッセージの受信表示処理

        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
      100
      101
      102
      103
      104
      105
      106
      <html>
      <head>
      </head>
      <body>
      <div id="output"></div>
      
      <script>
      (function() {
        // websocketサーバアドレスおよびポートを指定
        var ws = new WebSocket("wss://localhost:443");
      
        var output = document.getElementById('output');
      
        function logStr(eventStr, msg) {
          return '<div>' + eventStr + ':' + msg + '</div>';
        }
      
        // websoket接続確立イベント処理
        ws.onopen = function() {
          output.innerHTML += logStr('connect', 'success');
      
          // websocket認証メッセージ
          var auth_message = {
            version: {
              common_version:   "1",					// commonセクションバージョン
              details_version:  "1"					// detailsセクションバージョン
            },
            common: {
              datatype:     "authentication",				// データタイプ:認証(authenticaion指定)
              msgid:        "*",					// *を設定(認証では利用しない)
              sendid:       "*",					// *を設定(認証では利用しない)
              senddatetime: "*"					// *を設定(認証では利用しない)
            },
            details:      {
              password:     "trialpass"				// ユーザパスワードを設定(利用申請時に発行)
            },
            sender: {
              version:      "1",					// senderセクションバージョン
              userid:       "trialuser",				// ユーザIDを設定(利用申請時に発行)
              termid:       "000000001"				// 接続端末識別IDを設定(ユーザがユニークな値となるよう任意に採番)
            },
            receiver: {
              version:      "1",					// receiverセクションバージョン
              userid:       "*",					// *を設定(認証では利用しない)
              termid:       "*"					// *を設定(認証では利用しない)
            }
          };
          // JSON形式に変換し、websocketサーバに送信
          ws.send(JSON.stringify(auth_message));
        };
      
        // メッセージ受信イベント処理
        ws.onmessage = function(e) {
          // JSON形式からオブジェクトに変換
          var parse = JSON.parse(e.data);
      
          switch( parse.common.datatype ) {
            case "authentication":    // 認証メッセージ受信処理
              output.innerHTML += logStr('recieved', 'authentication result');
              if( parse.details.resultcode === '200' ) {
                // 認証成功
                output.innerHTML += logStr('authentication', 'success');
              } else {
                // 認証失敗
                output.innerHTML += logStr('authentication', 'failed');
              }
              break;
            case "jmatsunami_offshore":        // 津波情報受信処理
              // 潮位観測所情報(例:潮位観測所:20190=青森八戸沖)
              for( var i = 0, len = parse.details.length; i < len; i++ ) {
                var data = parse.details[i];
                if( data.stationcode == "20190" ) {
                  // 津波情報メッセージ種別判別
                  switch( data.controlstatus ) {
                    case "通常":  // 通常報
                      break;
                    case "訓練":  // 訓練報
                      output.innerHTML += "<br><FONT color=\"#ff0000\">これは訓練報です。</FONT><br>";
                      break;
                    case "試験":  // 試験報
                      output.innerHTML += "<br><FONT color=\"#ff0000\">これはテスト報です。</FONT><br>";
                      break;
                  }
                  if(  data.height_desc != "" ) {
                    var sd = new Date();
                    sd.setTime(data.observetime * 1000);
                    var sd_hh = sd.getHours();
                    var sd_mm = sd.getMinutes();
                    var sd_ss = sd.getSeconds();
                    output.innerHTML += sd_hh + ":" + sd_mm + ":" + sd_ss + ":" + "頃、" + data.height_desc + "の津波を観測しました。<br>";
                  }
                }
              }
              break;
          }
        };
      
        // 切断イベント処理
        ws.onclose = function (e) {
          output.innerHTML += logStr('disconnect', e.code + ' - ' + e.type);
        };
      }());
      
      </script>
      </body>
      </html>