JR北海道の kitacaエリア 列車運転状況 json の構造

# 2024/3/10 追記
::: note warn
2024年1月9日から運行情報ページがリニューアルされたため、Kitacaエリア（札幌近郊）列車運転状況は廃止されたため、この方法は使えなくなっています。
:::

# JR北海道の運行情報の種類
JR北海道の運行情報ページは、jsonを使用して表示しています。
また、３種類に分かれています。

## 列車運行情報
今日と明日の運行情報をエリア（路線）ごとに示してくれます。
<b>事前に決まっている運行状況（大雪による減便等）や大幅な遅れ（３０分以上）、運休（故障・事故等）でない限り更新されません</b>。

https://www3.jrhokkaido.co.jp/webunkou/index.html
## 各駅運行情報
今日と明日の運行情報を駅ごとに示してくれます。
運休・部分運休を示してくれますが、<b>列車の遅れは反映されません</b>。

https://www3.jrhokkaido.co.jp/webunkou/stationlist.html

## Kitacaエリア(札幌近郊)列車運転状況
路線ごとではなく<b>各列車ごと</b>の運転状況を示してくれます。
ただし、<b>[Kitacaエリア](https://www3.jrhokkaido.co.jp/monitor/pdf/sa_area.pdf "Kitacaエリア (札幌近郊) 路線図")（小樽〜苫小牧・岩見沢間、学園都市線の札幌近郊地域）のみ</b>と限られています。

https://www3.jrhokkaido.co.jp/monitor/index.html

# Kitacaエリア(札幌近郊)列車運転状況　jsonの仕様
運転状況ページでは３種類のjsonを組み合わせて表示しているようです。

:::note warn
独自研究を含んでおり、内容が正確ではない可能性があります。
誤りがありましたら、コメント等で報告をお願いします。
:::

## station_numbering.json
https://www3.jrhokkaido.co.jp/monitor/unkou_info/json/station_numbering.json

kitacaエリア内全駅の、<b>駅番号（station_numbering）</b>が格納されています。
<table>
<caption>JSONの仕様</caption>
<thead>
<tr><th>key</th><th>value</th><th>例（札幌）</th></tr>
</thead>
<tr><td>ID</td><td>駅番号</td><td>091</td></tr>
<tr><td>value</td><td>駅名</td><td>札幌</td></tr>
<tr><td>areaKey</td><td>路線コード</td><td>（空白）</td></tr>
<tr><td>areaNo</td><td>路線内での駅番号</td><td>01</td></tr>
<tr><td>color</td><td>路線カラー</td><td>030000</td></tr>
</table>

jsonの形は以下の通りです。
```json:station_numbering.json（抜粋）
{
  "station_numbering" : 
  [
  {
    "ID" : "091",
    "value" : "札幌",
    "areaKey" : "",
    "areaNo" : "01",
    "color" : "030000"
  },
  ]
}
```

## stationlist.json
https://www3.jrhokkaido.co.jp/monitor/unkou_info/json/stationlist.json

kitakaエリア内全駅の、<b>駅名など</b>が格納されています。
<table>
<caption>JSONの仕様</caption>
<thead>
<tr><th>key</th><th>value</th><th>例（札幌）</th></tr>
</thead>
<tr><td>ID</td><td>駅番号</td><td>091</td></tr>
<tr><td>value</td><td>駅名</td><td>札幌</td></tr>
<tr><td>hira</td><td>ふりがな</td><td>さっぽろ</td></tr>
<tr><td>kata</td><td>フリガナ</td><td>サッポロ</td></tr>
<tr><td>en</td><td>英語表記</td><td>Sapporo</td></tr>
<tr><td>lat</td><td>緯度</td><td>43.068701</td></tr>
<tr><td>lng</td><td>経度</td><td>141.350738</td></tr>
<tr><td>tid</td><td>運行情報表示装置？</td><td>true</td></tr>
<tr><td>tw</td><td>台湾語表記</td><td>札幌</td></tr>
<tr><td>cn</td><td>中国語表記</td><td>札幌</td></tr>
<tr><td>kr</td><td>韓国語表記</td><td>삿포로</td></tr>
<tr><td>area</td><td>エリア</td><td>（省略）</td></tr>
</table>

tidは、運行情報表示装置 (Traffic Information Display)だと思われます。
jsonの形は以下の通りです。

```json:station_numbering.json（抜粋）
{
  "stations" : [
  {
    "ID" : "091",
    "value" : "札幌",
    "hira" : "さっぽろ",
    "kata" : "サッポロ",
    "en" : "Sapporo",
    "lat" : "43.068701",
    "lng" : "141.350738",
    "tid" : "true",
    "tw" : "札幌",
    "cn" : "札幌",
    "ko" : "삿포로",
    "area" : [
    true,
    true,
    false,
    false,
    false,
    false
    ]
  },
  ]
}
```

## service（駅番号）.json
札幌駅（駅番号：091）の場合

https://www3.jrhokkaido.co.jp/monitor/unkou_info/json/services091.json

各駅運転状況データの本体です。

:::note warn
駅ごとにURLが異なり、駅番号が必要です。
:::

```https://www3.jrhokkaido.co.jp/monitor/unkou_info/json/services（駅番号）.json```となっています。
駅番号は３桁の半角数字で、先程紹介した２つのjsonで取得できます。

そのため、札幌駅の場合（駅番号：091）は
```https://www3.jrhokkaido.co.jp/monitor/unkou_info/json/services091.json```となっています。

<table>
<caption>JSONの仕様</caption>
<thead>
<tr><th>key</th><th>value</th><th>例（札幌）</th></tr>
</thead>
<tr><td>services</td><td>駅番号</td><td>091</td></tr>
<tr><td>departures_datetime</td><td>出発時刻</td><td>202308100600</td></tr>
<tr><td>departures</td><td>出発方面</td><td>函館線[小樽方面へ]@1<br>函館線[岩見沢方面へ]@1<br>千歳線[千歳方面へ]@1<br>千歳線[（快速）新千歳空港へ]@1<br>学園都市線[当別方面へ]@1</td></tr>
<tr><td>arrivals_datetime</td><td>到着時刻</td><td>202308100600</td></tr>
<tr><td>arrivals</td><td>到着方面</td><td>函館線[小樽方面から]@1<br>函館線[岩見沢方面から]@1<br>千歳線[千歳方面から]@1<br>千歳線[（快速）新千歳空港から]@1<br>学園都市線[当別方面から]@1</td></tr>
</table>

:::note info
駅ごとに出発・到着方面の項目数は異なります。
:::

:::note warn
出発・到着時刻、方面ごとに分かれているため注意が必要です。
:::

departures・arrivalsの中に方面ごとに分かれている列車運転状況は以下のように分類されています。

<table>
<caption>JSONの仕様</caption>
<thead>
<tr><th>key</th><th>value</th><th>例（函館線[小樽方面へ]@1）</th></tr>
</thead>
<tr><td>class</td><td>列車種別</td><td>快速</td></tr>
<tr><td>name</td><td>列車名</td><td>エアポート〇〇号</td></tr>
<tr><td>time</td><td>出発(到着)時刻</td><td>12:34</td></tr>
<tr><td>to</td><td>終着駅</td><td>小樽</td></tr>
<tr><td>status</td><td>運行状況コード</td><td>2</td></tr>
<tr><td>add</td><td>運休区間</td><td>運休(小樽-手稲間)</td></tr>
<tr><td>now</td><td>遅れ時間<br>（運行中の現在位置）</td><td>約10～15分遅れ(新札幌駅)</td></tr>
<tr><td>dest</td><td>終着駅と行先が違う場合の行先</td><td>（空白）</td></tr>
</table>

jsonの構造は以下の通りです。
```json:services091.json（抜粋）
{
  "services" : {
  "091" : {
  "departures_datetime" : "202308100800",
  "departures" : {
    "函館線[小樽方面へ]@1" : [
      {
         "class" : "普通",
         "name" : "普通",
         "time" : "09:03",
         "to": "手稲",
         "status": 0,
         "add" : "",
         "now" : "(厚別-森林公園間)",
         "dest" : ""
       },
     ],
    "千歳線[千歳方面へ]@1": [
     ],
   },
  "arrivals_datetime": "202308100800",
  "arrivals": {
  "函館線[小樽方面から]@1": [
    ],
  }
}
```

### 【参考】運行状況コードの分類
<table>
<thead>
<tr><th>code</th><th>運行状況</th></tr>
</thead>
<tr><td>0</td><td>通常運行</td></tr>
<tr><td>1</td><td>列車遅延</td></tr>
<tr><td>2</td><td>部分運休</td></tr>
<tr><td>3</td><td>全区間運休</td></tr>
<tr><td>4</td><td>空（empty）</td></tr>
<tr><td>5</td><td>発車前</td></tr>
<tr><td>6</td><td>発車前<br></tr>
<tr><td>7</td><td>表示区間外<br></tr>
</table>

# 編集後記
今回紹介したjsonだけでは編成両数が分かりません。そのため、他のjsonを組み合わせることで両数表示が可能です。

ちなみに、札幌市営地下鉄は列車ごとの運転状況を公開していないようです。しかし、札幌市内のバスはバスロケーションシステムを導入しており、バスの現在位置が分かります。それについての取得方法も今度書こうと思います。