📑
ODPTから代々木上原駅始発の便のデータを取得してみた
今回はODPTデータセンターから時刻表データを取得してみます。
具体的には代々木上原駅の以下の時刻表データをとってみます:
- 代々木上原始発(小田急線から流れてきたものは除く)
- 千代田線北綾瀬行き
Webサイト:
時刻表データを取得したく、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便ありデータは正確そうです。
こちらのデータを使ってiOS Widgetを作っていきたいと思います。
Discussion