WebSocket API仕様(指定河川洪水予報受信者向け)


指定河川洪水予報について

  • 指定河川洪水予報は、河川の増水や氾濫などに対する水防活動の判断や住民の避難行動の参考となるように、気象庁は国土交通省または都道府県の機関と共同して、あらかじめ指定した河川について、区間を決めて水位または流量を示した洪水の予報を行っています。
  • 気象庁では、対象となる河川の水位や氾濫の状況によって氾濫注意情報、氾濫警戒情報、氾濫危険情報、氾濫発生情報の4つの情報を発表しています。

注意事項

  • 本仕様は検討段階のものであるため、仕様が変更される可能性があります。
  • 本サービスは、河川洪水の発生を予知するものではありません。
  • 本サービスは、気象庁が発表する指定河川洪水予報に含まれる情報(予報区域、対象市町村など)を用いて、氾濫注意情報、氾濫警戒情報、氾濫危険情報、氾濫発生情報を通知するものです。
  • 指定河川洪水予報についての詳細は、 気象庁のwebサイト でご確認ください。
  • 本サービスでは、気象庁が発表する指定河川洪水予報の内、運用種別:「通常」のみを取り扱い、「訓練」や「試験」は取り扱いません。
  • 本サービスで通知する指定河川洪水予報のデータに、「通常」「訓練」「試験」のモードが存在します。データを利用する際にはこれらのモードに対して適切な処理を行ってください。
    • 例えば「訓練」「試験」モードのデータは利用しない、利用する場合は明らかに 訓練試験 であることが分かるようにするなど、利用者の混乱を避けてください。
    • 「訓練」「試験」モードのデータを、「通常」データであるかのような処理は 行わない でください。
    • モードの誤用によるトラブルについては、弊社は一切の責任を負わないものとします。

指定河川洪水予報の通知について

  • 気象庁が指定河川洪水予報の発表時に、発令または解除された予報を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 jmaflood メッセージのタイプ  
      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名:"jmaflood"が設定されます。
        • 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
      <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 "jmaflood":         // 指定河川洪水予報受信処理
              // 指定河川洪水予報メッセージ種別判別
              for( var i = 0, len = parse.details.length; i < len; i++ ) {
                var data = parse.details[i];
                // 指定河川洪水予報(例:市町村コード:東京都千代田区:1310100)
                if( data.areacode == "1310100" ) {
                  switch( data.controlstatuscode ) {
                    case "0":  // 通常報
                      break;
                    case "1":  // 訓練報
                      output.innerHTML += "<br><FONT color=\"#ff0000\">これは訓練報です。</FONT><br>";
                      break;
                    case "2":  // 試験報
                      output.innerHTML += "<br><FONT color=\"#ff0000\">これはテスト報です。</FONT><br>";
                      break;
                  }
                  output.innerHTML += "東京都千代田区:指定河川洪水予報が" + data.reportname + "に更新されました。<br>";
                }
              }
              break;
          }
        };
      
        // 切断イベント処理
        ws.onclose = function (e) {
          output.innerHTML += logStr('disconnect', e.code + ' - ' + e.type);
        };
      }());
      
      </script>
      </body>
      </html>