東京公共交通オープンデータチャレンジのバスAPIまとめ

#東京公共交通オープンデータチャレンジ
この度、[**第2回 東京公共交通オープンデータチャレンジ**](https://tokyochallenge.odpt.org/) というオープンデータを用いたコンテストに参加することになりました。

そこで、複数人でやる上で各APIが何を表しているのかが少々分かりづらく、毎回長い仕様から探しだすのも手間かと思ったので、メモがてら記録したものを、バスAPIのものに限りますが投稿します。簡単にまとめて、かつ確実性も薄いところがあるので、詳しい情報は仕様書を読んでください。




#APIの種類
バスについては、6種類のAPIが用意されていました。

- Bus：バスの運行情報
- BusstopPole：バス停（標柱）の情報
- BusroutePattern：路線の系統情報
- BusstopPoleTimetable：時刻表
- BusroutePatternFara：運賃情報
- BusTimetable：ある一つのバスがそれぞれの停留所に止まる時間（時刻表）

ではそれぞれを詳しく説明していきます。




#Bus：バスの運行情報
この運行情報とは、バス１つ１つ、それぞれのバスのリアルタイムの運行情報のことを意味しています。

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | データの固有識別ID |
| dc:date           |           データ生成日付 | 
| odpt:note          |           路線、方面：直前の停留所 | 
| owl:sameAs        |              バスのID |
| odpt:busroute        |            路線のID |
| opdt:operator      |         運営会社 |
|odpt:frequency | データの更新頻度 | 
| odpt:toBusstoppole | 次の停留所のID |
| odpt:toBusstopPattern | バス車両の運行系統のID |
| odpt:fromBusstopPole | 直前の停留所名 |
| odpt:fromBusstopPoleTime | 直前の停留所についた（通過した）時間 |
| odpt:startingBusstopPole | 始発駅のID |
| odpt:terminalBusstopPole | 終着駅のID |

やはり注目するのは前後の停留所名や、直前の停留所についた時間でしょうか。



#BusstopPole：バス停（標柱）の情報
それぞれのバス停に関する情報です。

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | バス停（標柱）のID |
| dc:date | データ生成日付 |
| geo:lat | 停留所の緯度 |
| dc:title | バス停の名前 |
| geo:long | バス停の経度 |
| odpt:kana | バス停のかなよみ |
| odpt:note | バス停の名前：バス停の番号(?) |
| ug:region | 地物情報 |
| owl:sameAs | バス停のID |
| odpt:operator | 運営会社ID |
| odpt:busLocationURL | 各路線のリンク |
| odpt:busroutePatttern | 運行中の系統(?) |
| odpt:busstopPoleNumbre | 停留所番号[^1] |
| odpt:busstopPoleTimetable | 停留所の時刻表分類(?) |

バス停のかなり細かな緯度経度が分かるため、バス停を何かに用いる場合は必須と思われます。
また、ここで初めて出てきた ug:region ですが、何度か出てきたものの、多くが値の入ってない状態でした。

[^1]: odpt:busstopPoleNumbre ですが、これはその停留所そのもののIDとは限らず、同名の停留所との判別をするための番号です。




#BusroutePattern：路線の系統情報
バスの運行系統や、実際にどの駅にどういう順番で止まるかなどの情報があります。

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | 運行系統のID |
| dc:date | データ生成日付 |
| dc:title | バス系統 |
| odpt:kana | バス路線名称のよみがな |
| odpt:note | 系統、区間 |
| odpt:region | 地物情報 |
| owl:sameAs | 運行系統ID |
| odpt:pattern | 系統パターン |
| odpt:busroute | 系統ID |
| odpt:direction | 方向 |
| odpt:busstopPoleOrder | 下記表参照 |

〇〇行、渋〇 といった、情報が入っており、
また odpt:busstopPoleOrder の中がさらにリストとなっていて、


| 名前       |      説明   |
|:-----------------|------------------------: |
| odpt:note | 停留所名 |
| odpt:index | 止まる順番 |
| odpt:busstopPole | 路線ID（運営会社,停留所) | 


これらの情報がリストとしてありました。
odpt:index は０から始まっているため、このインデックス０が始発駅だと思われます。



#BusstopPoleTimetable：時刻表
私たちが日常生活で見る、停留所などに貼ってある時刻表が情報として記されています。

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | バス停（標柱）の時刻表のID |
| dc:date | データ生成日付 |
| dc:title | バスの種類 |
| owl:sameAs | バス停（標柱）時刻表のID |
| odpt:busroute | 路線のID |
| odpt:calendar | 曜日 |
| operator | 運営会社 |
| odpt:busstopPole | 路線の始発駅 |
| odpt:busDirection | 方面のID |
| odpt:busstopPoleTimetableObject | 下記表参照 |

時刻表は、平日・土曜日・休日の3種類あるため、 odpt:calendar にその情報が入っています。
また、 odpt:busstopPole というのは、その時刻表が対応している路線の始発駅を示すID、その下は終着駅を示すIDです。

そして odpt:busstopPoleTimetableObject の中身はこちらです。

| 名前       |      説明   |
|:-----------------|------------------------: |
| odpt:isMidnitht | 深夜バス |
| odpt:isNonStepBus | ノンステップバス |
| odpt:departuerTime | 出発時刻 |
| odpt:destinationSign | 方面(終着駅) |
| odpt:destinationBussstopPole | バス停（標柱）ID |
このうち、上二つは真偽値で記されていて、その出発時刻のバスが深夜バスか否か、ノンステップバスか否かが分かります。
これらが、そのバス停の朝1から終バスまで、順番にリストで入っています。



#BusroutePatternFara：運賃情報
それぞれのバスの運賃についての情報です

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | ID |
| dc:date | データ生成日付 |
| owl:sameAs | 路線情報ID（運営会社、乗車駅、降車駅） |
| odpt:operator | 運営会社 |
| odpt:ticketFare | 料金 |
| odpt:toBusstopPole | 降車バス停標柱 |
| odpt:childTicketFare | 子供料金 |
| odpt:fromBusroutePattern | 乗車バス停標柱 |
| odpt:toBusstopPattern | 降車系統パターン |
| odpt:toBusstopPoleOrder | 停留所（標柱）通過順 |
| odpt:fromBusstoppoleOrder | 乗車系統パターン |
| odpt:fromBusstopPoleorder | 乗車停留所の系統パターン内の停留所（標柱）通過順 |
どこでバスにのり、どこでバスを降りたか。そしてその場合の料金が入っています。
また、 odpt:toBusstopPoleOrder については恐らくとしか言えませんが、降車停留所が始発駅から何駅目か。を表しているのではないかと思います。乗車の方も同じです。

また、このAPIを実際にたたいた時、なぜか運営会社がJRバス関東の情報しか確認できませんでした。偶々見たデータがその会社しかなかったのか。JSONの上の方にJRバス関東が表示される傾向があったのか。理由はわかりません。



#BusTimetable：ある一つのバスがそれぞれの停留所に止まる時間（時刻表）
バスが始発駅から終着駅まで、どのような時間にそれぞれの停留所に到着するかが情報としてあります。

| 名前       |      説明   |
|:-----------------|------------------------: |
| @.id | バス時刻表のID |
| dc:date | データ生成日付 |
| dc:title | 系統 |
| opdt:note | 路線(系統:始発駅:曜日:時間) |
| owl:sameAs | 時刻表ID |
| odpt:busroute | 路線のID |
| odpt:calendar | 曜日 |
| opdt:operator | 運営会社 |
| opdt:busroutePattern | 系統のID |
| opdt:busTimetableObject | 下記表参照 |

時刻表なので、平日・土曜・休日の区別をつけるためのものが odpt:calendar かと思われます。
また今までと同様に opdt:busTimetableObject の中は、

| 名前       |      説明   |
|:-----------------|------------------------: |
| opdt:index | 停留所の順番（１から） |
| opdt:busstopPole | 路線ID |
| opdt:departureTime | 出発時間 |
| opdt:destinationSing | 方面 |

となっています。これは、インデックスが１から始発駅が順番に並んでいて、各停留所にバスが止まる順番に並んでいて、それぞれ出発時刻も記してあります。一駅ごとにある電車が到着する時間を確認すれば、それと同じ値になっていることが分かると思います。


#まとめ
あくまで、自分たちが分かりやすいように記録したものなので、間違いがあったり、分かりずらい表現があるかもしれませんので、そういうときはAPI仕様書をご確認ください。

また、一部何を表しているのか（API仕様書を読んでも）分かりずらかったり、どうしてその順番に並んでいる？と思うような場所もあり、そのような声は第1回のときからあったようなので、主にAPI仕様書がもう少し詳しく書かれるようになることを願っています。