JR北海道の各駅運行情報jsonを取得する

[前回](https://qiita.com/blackstone9614/items/2ff665034a03bc836c3a "JR北海道の列車運転状況 json を取得する")はkitacaエリアの運転状況だったので、今回は各駅運行情報のjsonの仕様を分析します。

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

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

# 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

</details>

# 各駅運行状況　jsonの仕様
運行状況ページでは主に２種類のjsonを組み合わせて表示しているようです。

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

https://www3.jrhokkaido.co.jp/webunkou/data/timetable/core/091_core.json

今日と明日の方面別の時刻表が載っています。

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

URLの形が、```https://www3.jrhokkaido.co.jp/webunkou/data/timetable/core/（駅番号）_core.json``` となっています。
駅番号は３桁の半角数字で、[eki_master.json](https://www3.jrhokkaido.co.jp/webunkou/data/master/eki_master.json?56460) から取得できます。

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

jsonは、以下のような構造になっています。

```text
├── today
│   ├── datatext //日付 M/D
│   └── timetable（路線・方面別に分かれています）
│       ├── rosen //路線
│       ├── homen //方面
│       └── trains（列車ごとに分かれています）
│           ├── cbango       //運用番号
│           ├── hour         //発車時
│           ├── min          //発車分
│           ├── name         //列車名
│           ├── type         //列車種別（数字）
│           ├── typeText     //列車種別（文字列）
│           ├── typesingle   //列車種別（一文字）
│           ├── shaTime      //発車時刻
│           ├── shuEki       //終着駅
│           ├── shuEkiSimple //終着駅（一文字）
│           └── ryosu        //両数
└── tomorrow
　　　（以下略）
```

trainsの中身は下のようになっています。

```json:091_core.json
{
  "cbango": "3827M",
  "hour": "09",
  "min": "10",
  "name": "エアポート８５号",
  "type": "2",
  "typeText": "快速",
  "typeSimple": "快",
  "shaTime": "09:10",
  "shuEki": "小樽",
  "shuEkiSimple": "小",
  "ryosu": 6
}
```

また、typeは [ressha_type_master.json](https://www3.jrhokkaido.co.jp/webunkou/data/master/ressha_type_master.json) より、８種類に分かれています。
分類は以下の通りです。
<table>
<thead>
<tr><th>key</th><th>value</th></tr>
</thead>
<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>北海道新幹線</td></tr>
<tr><td>5</td><td>特別快速</td></tr>
<tr><td>6</td><td>ライナー</td></tr>
<tr><td>7</td><td>臨時列車</td></tr>
<tr><td>8</td><td>快速（札幌〜手稲・小樽間普通）</td></tr>
</table>

## now.json
最新の運転状況が載っています。

https://www3.jrhokkaido.co.jp/webunkou/data/timetable/now/091_now.json

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

URLの形が、```https://www3.jrhokkaido.co.jp/webunkou/data/timetable/now/（駅番号）_now.json``` となっています。
駅番号は３桁の半角数字で、[eki_master.json](https://www3.jrhokkaido.co.jp/webunkou/data/master/eki_master.json?56460) から取得できます。

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

jsonは以下のような構造になっています。
```text
├── time    //アクセス時刻
├── timeEn  //アクセス時刻（英語）
├── timeTc  //アクセス時刻（中国語）
├── timeSc  //アクセス時刻（中国語）
└── timeKr  //アクセス時刻（韓国語）
    ├── today
    │   ├── cbango          //運用番号
    │   ├── status          //状態コード
    │   ├── statusDetail    //状態
    │   ├── statusDetailEn  //状態（英語）
    │   ├── statusDetailSc  //状態（中国語）
    │   ├── statusDetailTc  //状態（中国語）
    │   └── statusDetailKr  //状態（韓国語）
    └── tomorrow（以下略）
```
core.jsonとは違い、列車が方向別に分かれていません。
運用番号がキーとなっています。

列車が運休になった場合、jsonは以下のような表示になります。
```json:091_now.json
{
  "cbango": "71D",
  "status": 0,
  "statusDetail": "全区間運休 (札幌～網走 間)",
  "statusDetailEn": "All sections cancelled (between Sapporo and Abashiri)",
  "statusDetailSc": "全区间停驶 (札幌～网走 之间)",
  "statusDetailTc": "全區間停駛 (札幌～網走 之間)",
  "statusDetailKr": "전 구간 운행 중지 (삿포로～아바시리 구간)"
}
```
通常時、```status``` は ```1``` になっていますが、運休時は ```0``` になります。

# 編集後記
今回は、各駅運行情報のjsonの構造について分析しました。
kitacaエリア運転情報と違い、遅れが表示されませんが、運用番号・両数が分かるのが特徴です。