MTAとは
ニューヨーク州都市交通局のこと。ニューヨークの地下鉄やバスを運営する独立法人のこと。
データを見てみよう
MTAのデータ、無料で使えます(ちなみに、ロゴ・マップ・シンボルは別途ライセンスが必要です)。データには登録無しで使えるものと登録が必要なものの二種類あります。
まず、利用規約を読みましょう。Google翻訳でも意味は取れます。自分も翻訳片手に書いてるので変なこと書いてたら教えてください。http://web.mta.info/developers/developer-data-terms.html
このデータを利用するとき(一般ユーザーに提供するとき)、直接MTAのサーバーにアクセスしてはいけません。デベロッパ側のサーバーを通す必要があります。
利用規約を読んだら、一番下の「Yes, I agree to these terms and conditions.」をクリックしましょう。ページの下部にデータ一覧が表示されます。利用できるデータは以下の通りです。[]内は提供拡張子です。
- 運行状況 [txt]
- 運行状況(地下鉄路線別)[xml]
- 運行状況(バス路線別)[xml]
- GTFS-RTアーカイブデータ(※別ページへのリンク)[zip]
- エレベーター・エスカレーター一覧(※下部リンクのpdfにXML定義があるので参照)[aspx]
- エレベーター・エスカレーターの運転状況(※下部リンクのpdfにXML定義があるので参照)[aspx]
- 遺失物一覧(※カテゴリ別の個数データ)[aspx]
- MTA Bus Time(※要APIキー)
- MTA Subway Time(※要APIキー)
- 運行変更予定 [xml]
- Long Island Rail Road Train Time (ロングアイランド鉄道)(※要APIキー)
- Metro-North Railroad Train Time (メトロノース鉄道)(※要APIキー)
- GTFSデータ(地下鉄・バス・メトロノース鉄道)[zip]
- GTFSデータ(ロングアイランド鉄道)[zip/json/xml]
- 資本データ
- デザインデータ
- ラインカラーデータ
- パフォーマンスデータ(どのようなデータが含まれているかはここを参照)
- 駅の位置 [csv]
- 複雑な駅 [csv]
- 運賃 [csv]
- 過去のバスの時刻 [xz]
- 過去の地下鉄の時刻(※実体はamazonawsにある)[tgz]
- 地下鉄のGISデータ
- バスのGISデータ
- 改札口利用状況
- 橋の交通データ [xml]
- 橋の料金データ [json]
運行状況には線路工事の為運休~等々の情報も入っています。
次に、リアルタイムなデータを見てみます。MTA Bus Timeとそれ以外でAPI取得の方法が異なるので別々に説明します。
MTA Bus TimeのAPI取得
上のリンクからhttp://bustime.mta.info/wiki/Developers/Indexに飛べると思います。「Go here to request an API Key.」をクリックするとGoogleフォームに飛ぶので名前とメールアドレス、その他事項を記入して送信します。
送信すると、数分後にAPIキーが書かれたメールが届きます。
GTFS-RTのデータを取得するには、発行されたAPIキーを用いて、以下のURLにアクセスします。
TripUpdate:http://gtfsrt.prod.obanyc.com/tripUpdates?key={api_key}
VehiclePosition:http://gtfsrt.prod.obanyc.com/vehiclePositions?key={api_key}
Alert:http://gtfsrt.prod.obanyc.com/alerts?key={api_key}
SIRI APIを用いるには、以下のURLにアクセスします。
SIRI VehicleMonitoring Call:http://api.prod.obanyc.com/api/siri/vehicle-monitoring.json?key={api_key}
SIRI StopMonitoring Call:http://bustime.mta.info/api/siri/stop-monitoring.json?key={api_key}
SIRIって何か調べたんですが「リアルタイム情報のサービスインターフェース」ということくらいしか分からず…同名の別サービスが有名過ぎて検索もままならないですね。http://user47094.vs.easily.co.uk/siri/index.htm:リンク切れ
VehicleMonitoringを取得する際には、システムの負荷を抑えるためにVehicleRef(GTFS 車両ID)もしくはLIneRef(GTFS 交通ブランドID+ルートID)を指定することが推奨されています。
StopMonitoringを取得する際には、keyに加えてMonitoringRef(GTFS stop_id)を指定しなければなりません。
それぞれ、GETパラメータを各種指定できるので参照すると良いことがあると思います。
Bus以外のAPI取得
まず、ガイドラインを参照(http://datamine.mta.info/usage-rules-and-guidelines)して上の「Register For Feeds」をクリック。
メールアドレス・名前・会社・国・住所・電話番号・利用目的(Intended Use)を入力しましょう。
入力しデータを送信すると、入力したメールアドレス宛にメールが届きます。URLが2つあるかと思いますが、上のURLではパスワードを設定します。下のURLはアクセスすると地下鉄のGTFS-RTのデータが返ってきます。
メールの途中に「MTA API KEY」が書かれていますので控えておきましょう。
下のURLをよく見てみましょう。http://datamine.mta.info/mta_esi.php?key={api_key}という構成になっているかと思います。このままだと、地下鉄の全てのデータを取得することになります。
しかしながら、データの取得範囲は状況に応じて絞っておきたいものです。これを実現するためには、feed_idを指定してhttp://datamine.mta.info/mta_esi.php?key={api_key}&feed_id={id}のようにします。feed_idと系統についてはhttps://datamine.mta.info/list-of-feeds(:リンク切れ)を参照のこと。
ロングアイランド鉄道のデータを取得するには、
https://mnorth.prod.acquia-sites.com/wse/LIRR/gtfsrt/realtime/{api_key}/{type}
を使用します。{type}はprotoを指定するとプロトコルバッファフィード、json・xmlと指定するとそれぞれの形式でデータが返るようです。
メトロノース鉄道のデータを取得するには、https://mnorth.prod.acquia-sites.com/wse/gtfsrtwebapi/v1/gtfsrt/{api_key}/getfeedにアクセスします。
地下鉄のデータはAPIキー発行と同時に取得できるようになりますが、ロングアイランド鉄道とメトロノース鉄道のデータはキーを発行しただけでは取得できません(Access deniedと返ります)。データを取得するには、MTAへメールを送る必要があるらしいです。自分は英弱なのでここで諦めました。
Busのデータを見る
GTFS-RT形式のデータはいつも通り開くだけです。FeedMessage->FeedEntity->vehicle->position内のbearingフィールドにも値が与えられています。その他特筆すべき事項無し(多分)。
SIRI APIのデータはとりあえずJSONにアクセスしてみましょう。VehicleMonitoringにアクセスし整形すると以下のようになります(長いので適宜省略しています)。VehicleMonitoringリクエストでは、特定のバスもしくはすべてのバスに関する情報を取得できます。バスを指定する際には、VehicleRefをGETパラメータに含める必要があります。
{
"Siri": {
"ServiceDelivery": {
"ResponseTimestamp": "2019-08-20T09:27:42.852-04:00",
"VehicleMonitoringDelivery": [
{
"VehicleActivity": [
{
"MonitoredVehicleJourney": {
"LineRef": "MTA NYCT_M9",
"DirectionRef": "1",
"FramedVehicleJourneyRef": {
"DataFrameRef": "2019-08-20",
"DatedVehicleJourneyRef": "MTA NYCT_MQ_C9-Weekday-055100_M9_114"
},
"JourneyPatternRef": "MTA_M090114",
"PublishedLineName": "M9",
"OperatorRef": "MTA NYCT",
"OriginRef": "MTA_405396",
"DestinationRef": "MTA_803108",
"DestinationName": "BATTERY PK CITY via AVENUE C via PK ROW",
"SituationRef": [],
"Monitored": true,
"VehicleLocation": {
"Longitude": -73.979442,
"Latitude": 40.723269
},
"Bearing": 233.47115,
"ProgressRate": "normalProgress",
"BlockRef": "MTA NYCT_MQ_C9-Weekday_C_MQ_31260_M9-114",
"VehicleRef": "MTA NYCT_3823",
"MonitoredCall": {
"ExpectedArrivalTime": "2019-08-20T09:27:43.852-04:00",
"ExpectedDepartureTime": "2019-08-20T09:27:43.852-04:00",
"Extensions": {
"Distances": {
"StopsFromCall": 0,
"CallDistanceAlongRoute": 2879.09,
"DistanceFromCall": 8.03,
"PresentableDistance": "at stop"
}
},
"StopPointRef": "MTA_403305",
"VisitNumber": 1,
"StopPointName": "AV C/E 6 ST"
},
"OnwardCalls": {}
},
"RecordedAtTime": "2019-08-20T09:27:19.000-04:00"
},
{
"MonitoredVehicleJourney": {
"LineRef": "MTA NYCT_M42",
"DirectionRef": "1",
"FramedVehicleJourneyRef": {
"DataFrameRef": "2019-08-20",
"DatedVehicleJourneyRef": "MTA NYCT_MQ_C9-Weekday-055200_M42_X01"
},
"JourneyPatternRef": "MTA_M420134",
"PublishedLineName": "M42",
"OperatorRef": "MTA NYCT",
"OriginRef": "MTA_403249",
"DestinationRef": "MTA_903082",
"DestinationName": "WEST SIDE PIER 12 AV CROSSTOWN",
"SituationRef": [],
"Monitored": true,
"VehicleLocation": {
"Longitude": -73.983798,
"Latitude": 40.754715
},
"Bearing": 157.16635,
"ProgressRate": "normalProgress",
"BlockRef": "MTA NYCT_MQ_C9-Weekday_C_MQ_25920_M42-X01",
"VehicleRef": "MTA NYCT_3826",
"MonitoredCall": {
"ExpectedArrivalTime": "2019-08-20T09:28:13.101-04:00",
"ExpectedDepartureTime": "2019-08-20T09:28:13.101-04:00",
"Extensions": {
"Distances": {
"StopsFromCall": 0,
"CallDistanceAlongRoute": 1578.19,
"DistanceFromCall": 50.3,
"PresentableDistance": "approaching"
}
},
"StopPointRef": "MTA_403830",
"VisitNumber": 1,
"StopPointName": "W 42 ST/AV OF THE AMERICAS"
},
"OnwardCalls": {}
},
"RecordedAtTime": "2019-08-20T09:27:37.000-04:00"
},
(以降略)
],
"ResponseTimestamp": "2019-08-20T09:27:42.852-04:00",
"ValidUntil": "2019-08-20T09:28:42.852-04:00"
}
],
"SituationExchangeDelivery": [
{
"Situations": {
"PtSituationElement": [
{
"PublicationWindow": {
"StartTime": "2018-12-06T00:00:00.000-05:00",
"EndTime": "2020-01-31T23:59:00.000-05:00"
},
"Severity": "undefined",
"Summary": "Until further notice<br clear=left>Westbound M22 buses are detoured from Worth St at Centre St to Lafayette St due to Con Edison work <br>",
"Description": "Until further noticeWestbound M22 buses are detoured from Worth St at Centre St to Lafayette St due to Con Edison workBuses make corresponding stops along the detoured route.Show DetourVia Worth StRight on Centre StLeft on Leonard StLeft on Lafayette St then regular route",
"Affects": {
"VehicleJourneys": {
"AffectedVehicleJourney": [
{
"LineRef": "MTA NYCT_M22",
"DirectionRef": "1"
}
]
}
},
"Consequences": {
"Consequence": [
{
"Condition": "diverted"
}
]
},
"CreationTime": "2018-12-06T00:00:00.000-05:00",
"SituationNumber": "MTA NYCT_210727"
},
{
"PublicationWindow": {
"StartTime": "2019-08-19T21:23:00.000-04:00"
},
"Severity": "undefined",
"Summary": "BX3, BX11, BX13, BX35 and BX36 buses are detoured in both directions because of milling on 181 St between Amsterdam and Wadsworth. Details at mta.info.",
"Description": "BX3, BX11, BX13, BX35 and BX36 buses are detoured in both directions because of milling on 181 St between Amsterdam and Wadsworth. Details at mta.info.",
"Affects": {
"VehicleJourneys": {
"AffectedVehicleJourney": [
{
"LineRef": "MTA NYCT_BX11",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_BX11",
"DirectionRef": "1"
},
{
"LineRef": "MTA NYCT_BX13",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_BX13",
"DirectionRef": "1"
},
{
"LineRef": "MTA NYCT_BX3",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_BX3",
"DirectionRef": "1"
},
{
"LineRef": "MTA NYCT_BX35",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_BX35",
"DirectionRef": "1"
},
{
"LineRef": "MTA NYCT_BX36",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_BX36",
"DirectionRef": "1"
}
]
}
},
"Consequences": {
"Consequence": [
{
"Condition": "altered"
}
]
},
"CreationTime": "2019-08-20T06:09:54.733-04:00",
"SituationNumber": "MTA NYCT_01e7e176-c210-4fd0-a6a7-b46d194a9d83"
},
(以降略)
]
}
}
]
}
}
}
VehicleActivityが列車情報の配列、PtSituationElementが運行情報の配列(?)かと思われます。よく分かってないので各自で和訳した方が確実だと思います。
ただ、データとしてはGTFS-RTとほぼ同じものが出力されています。公式でも、”As much as possible, the values used both in the VM request and the VM response correspond to the values in the GTFS data.”と述べられています。
次にStopMonitoringにアクセスしてみます。MonitoringRefは308214としました。
{
"Siri": {
"ServiceDelivery": {
"ResponseTimestamp": "2019-08-20T09:41:05.437-04:00",
"StopMonitoringDelivery": [
{
"MonitoredStopVisit": [
{
"MonitoredVehicleJourney": {
"LineRef": "MTA NYCT_B63",
"DirectionRef": "1",
"FramedVehicleJourneyRef": {
"DataFrameRef": "2019-08-20",
"DatedVehicleJourneyRef": "MTA NYCT_JG_C9-Weekday-055300_B63_105"
},
"JourneyPatternRef": "MTA_B630164",
"PublishedLineName": "B63",
"OperatorRef": "MTA NYCT",
"OriginRef": "MTA_801133",
"DestinationRef": "MTA_801042",
"DestinationName": "BAY RIDGE SHORE RD via 5 AV",
"SituationRef": [
{
"SituationSimpleRef": "MTA NYCT_238245"
}
],
"Monitored": true,
"VehicleLocation": {
"Longitude": -73.978701,
"Latitude": 40.68453
},
"Bearing": 337.92142,
"ProgressRate": "normalProgress",
"BlockRef": "MTA NYCT_JG_C9-Weekday_C_JG_16800_B63-105",
"VehicleRef": "MTA NYCT_804",
"MonitoredCall": {
"ExpectedArrivalTime": "2019-08-20T09:48:09.367-04:00",
"ExpectedDepartureTime": "2019-08-20T09:48:09.367-04:00",
"Extensions": {
"Distances": {
"StopsFromCall": 5,
"CallDistanceAlongRoute": 3647.43,
"DistanceFromCall": 1111.01,
"PresentableDistance": "0.7 miles away"
}
},
"StopPointRef": "MTA_308214",
"VisitNumber": 1,
"StopPointName": "5 AV/UNION ST"
},
"OnwardCalls": {}
},
"RecordedAtTime": "2019-08-20T09:40:46.000-04:00"
},
{
"MonitoredVehicleJourney": {
"LineRef": "MTA NYCT_B63",
"DirectionRef": "1",
"FramedVehicleJourneyRef": {
"DataFrameRef": "2019-08-20",
"DatedVehicleJourneyRef": "MTA NYCT_JG_C9-Weekday-064300_B63_116"
},
"JourneyPatternRef": "MTA_B630164",
"PublishedLineName": "B63",
"OperatorRef": "MTA NYCT",
"OriginRef": "MTA_801133",
"DestinationRef": "MTA_801042",
"DestinationName": "BAY RIDGE SHORE RD via 5 AV",
"OriginAimedDepartureTime": "2019-08-20T10:43:00.000-04:00",
"SituationRef": [
{
"SituationSimpleRef": "MTA NYCT_238245"
}
],
"Monitored": true,
"VehicleLocation": {
"Longitude": -73.994465,
"Latitude": 40.660322
},
"Bearing": 43.97697,
"ProgressRate": "normalProgress",
"ProgressStatus": "prevTrip",
"BlockRef": "MTA NYCT_JG_C9-Weekday_C_JG_24720_B63-116",
"VehicleRef": "MTA NYCT_373",
"MonitoredCall": {
"Extensions": {
"Distances": {
"StopsFromCall": 40,
"CallDistanceAlongRoute": 3647.43,
"DistanceFromCall": 9043.8,
"PresentableDistance": "5.6 miles away"
}
},
"StopPointRef": "MTA_308214",
"VisitNumber": 1,
"StopPointName": "5 AV/UNION ST"
},
"OnwardCalls": {}
},
"RecordedAtTime": "2019-08-20T09:40:34.000-04:00"
},
(以降略)
],
"ResponseTimestamp": "2019-08-20T09:41:05.437-04:00",
"ValidUntil": "2019-08-20T09:42:05.437-04:00"
}
],
"SituationExchangeDelivery": [
{
"Situations": {
"PtSituationElement": [
{
"PublicationWindow": {
"StartTime": "2019-08-19T00:00:00.000-04:00",
"EndTime": "2019-08-23T23:59:00.000-04:00"
},
"Severity": "undefined",
"Summary": "From 6 AM Mon, Aug 19 to 5 PM Fri, Aug 23<br clear=left>No B63 service to/from Brooklyn Bridge Park Rd at Joralemon St to Atlantic Av and Columbia St due to construction <br>",
"Description": "From 6 AM Mon, Aug 19 to 5 PM Fri, Aug 23No B63 service to/from Brooklyn Bridge Park Rd at Joralemon St to Atlantic Av and Columbia St due to construction Buses operates between Atlantic Av and Columbia St to Shore Rd at 3 Av.",
"Affects": {
"VehicleJourneys": {
"AffectedVehicleJourney": [
{
"LineRef": "MTA NYCT_B63",
"DirectionRef": "0"
},
{
"LineRef": "MTA NYCT_B63",
"DirectionRef": "1"
}
]
}
},
"Consequences": {
"Consequence": [
{
"Condition": "noService"
}
]
},
"CreationTime": "2019-08-19T00:00:00.000-04:00",
"SituationNumber": "MTA NYCT_238245"
}
]
}
}
]
}
}
}
先程と似たような構造のデータが出てきました。StopMonitoringリクエストでは、あるバス停(ストップ)に”サービスを提供する”(→停車or通過?)車両に関する情報を取得することができます。
MonitoringRefで指定したIDは、Siri->SecviceDelivery->StopMonitoringDelivery->MonitoredStopVisit->MonitoredVehicleJourney->MonitoredCall->StopPointRefに含まれます。上の例なら、”MTA_308214″となります。
Bus以外のデータを見る
GTFS-RTのデータはいつも通りのバイナリなので適当にパースすれば見れます。
特筆事項も無さそうなのでパス。
利用例
やっぱりGoogleMap。
公式サイト。日本で言うならバスロケ?
雑感
Googleのお膝元なのかどうかは知りませんが、公開が進んでいる印象です。どこぞの日の丸オープンデータ後進国とはえらい違いです。見習ってほしいですね。
あと、地下鉄の構造が分からない…。
コメント