📑

ODPTから代々木上原駅始発の便のデータを取得してみた

2024/07/04に公開

今回はODPTデータセンターから時刻表データを取得してみます。
具体的には代々木上原駅の以下の時刻表データをとってみます:

  • 代々木上原始発(小田急線から流れてきたものは除く)
  • 千代田線北綾瀬行き

Webサイト:

https://www.odpt.org/

時刻表データを取得したく、API使用を申請してみました。
申請を出してから2営業日ほどで許可が降りたというメールが届きます。

APIを使ってみる

まずは列車の位置情報を取得してみました。

ACL_CONSUMERKEY=xxxxxxxxx
curl -X GET \
"https://api.odpt.org/api/v4/odpt:Train"\
"?acl:consumerKey=$ACL_CONSUMERKEY" \
| jq .

...
  {
    "@id": "urn:uuid:fbe01d99-928f-42bb-a9dc-3e7d08758578",
    "@type": "odpt:Train",
    "dc:date": "2024-07-04T17:43:50+09:00",
    "@context": "http://vocab.odpt.org/context_odpt.jsonld",
    "dct:valid": "2024-07-04T17:44:50+09:00",
    "odpt:delay": 0,
    "owl:sameAs": "odpt.Train:YokohamaMunicipal.Blue.1644b",
    "odpt:railway": "odpt.Railway:YokohamaMunicipal.Blue",
    "odpt:operator": "odpt.Operator:YokohamaMunicipal",
    "odpt:toStation": "odpt.Station:YokohamaMunicipal.Blue.Shonandai",
    "odpt:trainType": "odpt.TrainType:YokohamaMunicipal.Local",
    "odpt:fromStation": "odpt.Station:YokohamaMunicipal.Blue.Shimoiida",
    "odpt:trainNumber": "1644b",
    "odpt:originStation": [
      "odpt.Station:YokohamaMunicipal.Blue.Azamino"
    ],
    "odpt:railDirection": "odpt.RailDirection:Outbound",
    "odpt:destinationStation": [
      "odpt.Station:YokohamaMunicipal.Blue.Shonandai"
    ]
  }
]

千代田線の情報を取得してみます。

ACL_CONSUMERKEY=xxxx \
curl -X GET "https://api.odpt.org/api/v4/odpt:Railway"\
"?acl:consumerKey=$ACL_CONSUMERKEY" \
| jq '.[] | select(."odpt:railwayTitle".en == "Chiyoda Line")'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  117k  100  117k    0     0  1484k      0 --:--:-- --:--:-- --:--:-- 1492k
{
  "@id": "urn:ucode:_00001C000000000000010000030C46B0",
  "@type": "odpt:Railway",
  "dc:date": "2024-06-27T08:00:00+09:00",
  "@context": "http://vocab.odpt.org/context_odpt.jsonld",
  "dc:title": "千代田線",
  "odpt:color": "#00BB85",
  "owl:sameAs": "odpt.Railway:TokyoMetro.Chiyoda",
  "odpt:lineCode": "C",
  "odpt:operator": "odpt.Operator:TokyoMetro",
  "odpt:railwayTitle": {
    "en": "Chiyoda Line",
    "ja": "千代田線",
    "ko": "치요다선",
    "zh-Hans": "千代田线",
    "zh-Hant": "千代田線"
  },
  "odpt:stationOrder": [
    {
      "odpt:index": 1,
      "odpt:station": "odpt.Station:TokyoMetro.Chiyoda.YoyogiUehara",
      "odpt:stationTitle": {
        "en": "Yoyogi-uehara",
        "ja": "代々木上原",
        "ko": "요요기우에하라",
        "ja-Hrkt": "よよぎうえはら",
        "zh-Hans": "代々木上原",
        "zh-Hant": "代代木上原"
      }
    },
...
    {
      "odpt:index": 20,
      "odpt:station": "odpt.Station:TokyoMetro.Chiyoda.KitaAyase",
      "odpt:stationTitle": {
        "en": "Kita-ayase",
        "ja": "北綾瀬",
        "ko": "기타아야세",
        "ja-Hrkt": "きたあやせ",
        "zh-Hans": "北绫瀬",
        "zh-Hant": "北綾瀨"
      }
    }
  ],
  "odpt:ascendingRailDirection": "odpt.RailDirection:TokyoMetro.KitaAyase",
  "odpt:descendingRailDirection": "odpt.RailDirection:TokyoMetro.YoyogiUehara"
}

千代田線の情報が取れたので、それを使って代々木上原駅の始発データを取ってみます。

レスポンスは二つの配列によって構成されています。これは平日と土日祝日の時刻表を分けているからですね。

$ curl -s -X GET \
"https://api.odpt.org/api/v4/odpt:StationTimetable"\
"?acl:consumerKey=$ACL_CONSUMERKEY"\
"&odpt:station=odpt.Station:TokyoMetro.Chiyoda.YoyogiUehara"\
"&odpt:railway=odpt.Railway:TokyoMetro.Chiyoda"\
"&odpt:railDirection=odpt.RailDirection:TokyoMetro.KitaAyase" \
| jq '. | length'

2

$ curl -s -X GET \
"https://api.odpt.org/api/v4/odpt:StationTimetable?acl:consumerKey=$ACL_CONSUMERKEY"\
"&odpt:station=odpt.Station:TokyoMetro.Chiyoda.YoyogiUehara"\
"&odpt:railway=odpt.Railway:TokyoMetro.Chiyoda"\
"&odpt:railDirection=odpt.RailDirection:TokyoMetro.KitaAyase" \
| jq '.[]."odpt:calendar"'

"odpt.Calendar:SaturdayHoliday"
"odpt.Calendar:Weekday"

土日は150便ありますね。

$ curl -s -X GET \
"https://api.odpt.org/api/v4/odpt:StationTimetable?acl:consumerKey=$ACL_CONSUMERKEY"\
"&odpt:station=odpt.Station:TokyoMetro.Chiyoda.YoyogiUehara"\
"&odpt:railway=odpt.Railway:TokyoMetro.Chiyoda"\
"&odpt:railDirection=odpt.RailDirection:TokyoMetro.KitaAyase" \
| jq '[.[] | select(.["odpt:calendar"] == "odpt.Calendar:SaturdayHoliday") | .["odpt:stationTimetableObject"][] | select(.["odpt:isOrigin"] == true)] | length'



150

平日は169便のようです。

$ curl -s -X GET \
"https://api.odpt.org/api/v4/odpt:StationTimetable?acl:consumerKey=$ACL_CONSUMERKEY"\
"&odpt:station=odpt.Station:TokyoMetro.Chiyoda.YoyogiUehara"\
"&odpt:railway=odpt.Railway:TokyoMetro.Chiyoda"\
"&odpt:railDirection=odpt.RailDirection:TokyoMetro.KitaAyase" \
| jq '[.[] | select(.["odpt:calendar"] == "odpt.Calendar:Weekday") | .["odpt:stationTimetableObject"][] | select(.["odpt:isOrigin"] == true)] | length'


169

ちなみに時刻表Webページでも検索してみましたがこちらも平日は169便ありデータは正確そうです。

https://transfer.tokyometro.jp/website/timetable?numbering=C01&direction=0&schedule=weekday

こちらのデータを使ってiOS Widgetを作っていきたいと思います。

Discussion