JR北海道の列車運行情報 json を取得する（2024/1/9仕様変更対応版）

# 2024/3/20 追記
2024年1月9日に行われた仕様変更による記事の修正を行いました。

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

## これまでの分析記事
[各駅運行状況](https://qiita.com/blackstone9614/items/541218af7b43c369e53e "JR北海道の列車運転状況 json を取得する")

~~[kitacaエリア運転状況](https://qiita.com/blackstone9614/items/2ff665034a03bc836c3a "JR北海道の列車運転状況 json を取得する")~~ 2024年1月9日の仕様変更により使用不可

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

<details><summary>JR北海道の運行情報の種類</summary>

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

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

## 各駅運行情報
今日と明日の運行情報を駅ごとに示してくれます。
運休・部分運休や<b>５分以上の列車の遅れが反映されます</b>。

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

## 列車走行位置（2024/1/9～）
その路線でどこに列車が走っているかを示してくれます。

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

</details>

# 列車運行状況　jsonの仕様
１種類のjsonに情報がまとまっていますが、エリアか路線かによって分かれています。

## area_xx.json
エリア（地域）ごとの運行情報を示しています。

札幌近郊エリアの場合

https://www3.jrhokkaido.co.jp/webunkou/json/area/area_01.json

:::note warn
エリアごとにURLが異なり、エリア（路線）番号が必要です。
:::

エリア番号は、[エリア区分](https://www3.jrhokkaido.co.jp/webunkou/pdf/areamap.pdf) で６種類に分かれていて、[area_name_master.json](https://www3.jrhokkaido.co.jp/webunkou/json/master/area_name_master.json) から取得することができます。
<table>
<thead>
<tr><th>エリア番号</th><th>エリア名</th></tr>
</thead>
<tr><td>01</td><td>札幌近郊</td></tr>
<tr><td>02</td><td>道央</td></tr>
<tr><td>03</td><td>道南</td></tr>
<tr><td>04</td><td>道北</td></tr>
<tr><td>05</td><td>道東</td></tr>
<tr><td>06</td><td>北海道新幹線</td></tr>
</table>

URLは、 `https://www3.jrhokkaido.co.jp/webunkou/json/area/area_（エリア番号）.json` の形になります。
そのため、札幌近郊（エリア番号：01）の場合は、`https://www3.jrhokkaido.co.jp/webunkou/json/area/area_01.json` となります。

## senku_xx.json
路線（線区）ごとの運行情報を示しています。

函館・千歳線（札幌近郊）の場合

https://www3.jrhokkaido.co.jp/webunkou/json/senku/senku_03.json

:::note warn
路線（線区）ごとにURLが異なり、路線番号が必要です。
:::

路線番号は、[senku_name_master.json](https://www3.jrhokkaido.co.jp/webunkou/json/master/senku_name_master.json) から取得することができます。

<table>
<thead>
<tr><th>路線番号</th><th>路線名</th></tr>
</thead>
<tr><td>01</td><td>札幌近郊　特急列車</td></tr>
<tr><td>02</td><td>札幌近郊　エアポート</td></tr>
<tr><td>03</td><td>札幌近郊　函館・千歳線</td></tr>
<tr><td>04</td><td>札幌近郊　学園都市線</td></tr>
<tr><td>05</td><td>道央エリア　特急列車</td></tr>
<tr><td>06</td><td>道央エリア　エアポート</td></tr>
<tr><td>07</td><td>道央エリア　函館・千歳線</td></tr>
<tr><td>08</td><td>道央エリア　学園都市線</td></tr>
<tr><td>09</td><td>道央エリア　室蘭線</td></tr>
<tr><td>10</td><td>道央エリア　日高線</td></tr>
<tr><td>11</td><td>道南エリア　特急列車</td></tr>
<tr><td>12</td><td>道南エリア　はこだてライナー</td></tr>
<tr><td>13</td><td>道南エリア　函館線</td></tr>
<tr><td>14</td><td>道北エリア　特急列車</td></tr>
<tr><td>15</td><td>道北エリア　宗谷線</td></tr>
<tr><td>16</td><td>道北エリア　石北線</td></tr>
<tr><td>17</td><td>道北エリア　富良野線</td></tr>
<tr><td>18</td><td>道北エリア　留萌線</td></tr>
<tr><td>19</td><td>道東エリア　特急列車</td></tr>
<tr><td>20</td><td>道東エリア　石勝線</td></tr>
<tr><td>21</td><td>道東エリア　根室線</td></tr>
<tr><td>22</td><td>道東エリア　根室線（花咲線）</td></tr>
<tr><td>23</td><td>道東エリア　釧網線</td></tr>
<tr><td>24</td><td>北海道新幹線</td></tr>
</table>
</details>

URLは、 `https://www3.jrhokkaido.co.jp/webunkou/json/senku/senku_（路線番号）.json` の形になります。
そのため、函館・千歳線　札幌近郊（路線番号：03）の場合は、`https://www3.jrhokkaido.co.jp/webunkou/json/senku/senku_03.json` となります。

## jsonの構造
URLはエリア、線区（路線）で分かれていましたが、jsonの中身はどちらも共通になっています。

```text:jsonファイルの構造

├── time   //取得日時
└── today  //日付
    ├── datatext   //今日の日付
    ├── areastatus //影響エリア
    │   ├── spo      //札幌近郊
    │   ├── doo      //道央
    │   ├── donan    //道南
    │   ├── dohoku   //道北
    │   ├── doto     //道東
    │   └── shin     //新幹線
    ├── gaikyo     //概況
    │   ├── time     //発信日時
    │   ├── title    //タイトル
    │   ├── honbun   //本文
    │   ├── eikyo    //影響エリア
    │   │   ├── spo    //札幌近郊
    │   │   ├── doo    //道央
    │   │   ├── donan  //道南
    │   │   ├── dohoku //道北
    │   │   └── doto   //道東
    │   ├── areaComments //エリアコメント
    │   ├── senkuStatus  //影響路線（線区）
    │   │   ├── express        // 特急
    │   │   ├── airport        // 快速エアポート
    │   │   ├── hakochise      // 函館・千歳線
    │   │   ├── hakodateLiner  // はこだてライナー
    │   │   ├── hakodate       // 函館線
    │   │   ├── gakuen         // 学園都市線
    │   │   ├── sekisho        // 石勝線
    │   │   ├── muroran        // 室蘭線
    │   │   ├── nemuro         // 根室線
    │   │   ├── hidaka         // 日高線
    │   │   ├── soya           // 宗谷線
    │   │   ├── sekihoku       // 石北線
    │   │   ├── furano         // 富良野線
    │   │   ├── rumoi          // 留萌線
    │   │   ├── senmo          // 釧網線
    │   │   └── hanasaki       // 花咲線
    │   ├── unkyuTrains（運休列車がある場合のみ子項目が追加）
    │   │   ├── name　  //列車名
    │   │   ├── haEki   //発車駅
    │   │   ├── haTime  //発車時刻
    │   │   ├── toEki   //到着駅
    │   │   ├── toTime  //到着時刻
    │   │   └── jokyo   //運行状況
    │   └── chienTrains（遅延列車がある場合のみ子項目が追加）
    │       ├── name　  //列車名
    │       ├── haEki   //発車駅
    │       ├── haTime  //発車時刻
    │       ├── toEki   //到着駅
    │       ├── toTime  //到着時刻
    │       └── jokyo   //運行状況
    └── tomorrow
　　　　　（以下略）
```

`areaStatus` 、`eikyo` 、`senkuStatus` の各項目の通常値は `0` で、異常（運休や大幅な遅れ）がある場合 `1` に変化します。
また、`gaikyo` は必ずしも１つというわけではなく、２つ以上になることもあります。（`unkyuTrains`、`chienTrains` も同様です）
`honbun`は、\<BR>タグなどがUnicode形の状態になっています。

# 編集後記
今回は、JR北海道の列車運行情報jsonについて分析しました。
インターネット上を調べても、公開されているjsonについての解説・分析記事が見つからなかったので、私自身のメモとしてまとめました。