公共交通オープンデータセンター
東京公共交通オープンデータチャレンジ っていうのがあって。。それのデータ元として、公共交通オープンデーターセンターというところに、データが集まっているようです。
データカタログとしては、こちらに130件のデータが存在しているようです。(2022/06/29時点)
小平で検索すると。。
期待どおりの展開(笑)
西武バスとかかな?と見ると。。
なんか役立ちそうなデータありそうですね。。
それで、データの中身を見ようと思ったんですが、
この読み方は、開発者登録して、アカウントから、アクセストークンの確認・追加から、トークンを読んで。。 それぞれのAPIのURLに KEY=[あなたのトークン] をつけたらダウンロードできるとのこと。。
開発者登録しないといけないというのと、開発者登録してもなかなか承認されていなかったので、見れなかったんですが。。なんと承認されたようで、無事見ることができるように。。
で。。 JSONはわかるけど。。GTFS,GTFS-RTって何??
GTFSは、ここにフォーマットが出てます。
で。。GTFS-RTは? なぜかGoogle君のサイトに。。
へーーーー 試しに、ダウンロードして、Textエディタで見てみたら、どうも。。Null文字が入っているみたい。
どうやって見るんだろう?って。。読み進めると。。Pythonのコードサンプルもあるじゃないですか!
ってことで。。
Google Collaboratory で見てみることに。。
西武バス バスロケーション情報 / Bus location information of Seibu Bus
このデータを見てみると。。
header { gtfs_realtime_version: "2.0" timestamp: 1656507042 } entity { id: "620" vehicle { trip { trip_id: "63001-2_02-\345\271\263\346\227\245_5765" schedule_relationship: SCHEDULED route_id: "63001" direction_id: 0 } position { latitude: 35.737186431884766 longitude: 139.60499572753906 bearing: 252.0 } current_stop_sequence: 3 timestamp: 1656507029 stop_id: "30029-01" vehicle { id: "620" label: "620" } occupancy_status: FEW_SEATS_AVAILABLE } } entity { id: "696" vehicle { trip { start_time: "21:17:06" start_date: "20220629" schedule_relationship: ADDED route_id: "63001" direction_id: 1 } position { latitude: 35.744564056396484 longitude: 139.60792541503906 bearing: 2.0 } current_stop_sequence: 15 timestamp: 1656507009 stop_id: "30030-02-03" vehicle { id: "696" label: "696" } occupancy_status: MANY_SEATS_AVAILABLE } }
と。。。謎の暗号が(笑)
Google Colabでのコードは
%pip install --upgrade gtfs-realtime-bindings
これを実行すると、Runtimeの再起動を言われるので、そのボタンを押し
from google.transit import gtfs_realtime_pb2 import urllib.request, urllib.error url ='https://api.odpt.org/api/v4/gtfs/realtime/SeibuBus_vehicle?acl:consumerKey=[あなたのトークン]' feed = gtfs_realtime_pb2.FeedMessage() with urllib.request.urlopen(url) as res: feed.ParseFromString(res.read()) print(feed)
で読めます。
JSON形式で読めるので、CSVなり何なりできますね。。
print(entity.id) :620
print(entity.vehicle.trip.trip_id) : “63001-2_02-\345\271\263\346\227\245_5765”
print(entity.vehicle.trip.route_id) : “63001”
print(entity.vehicle.trip.position.latitude):35.737186431884766
longitude: 139.60499572753906 で緯度経度?
が出てくるって感じですね。
で。。id が なに?? stop_idって何?? ってなるわけで。。
次は静的情報GTFS
今度は、こちらを見てみることに
そうすると、今度はなんと。。Zipファイルでテキストが入っています。
fare_ は料金? routes. はルート stops.はバス停 stop_times.は時刻表?
って感じで入っています。
試しに、さっきの stop_id 30029-01 を検索してみると。。
30029-01,,禅定院前,,35.73743,139.605334,30029-01,,0,,,
が入っています。route_id 63001で route.txtから検索すると
63001,6013301006270,荻14,,,3,,ff7800,000000,
が出てきます。
なるほど。
JSON形式でもある!(笑)
バスロケーション情報JSON形式でもある!! ので、こっちの方にアクセスすると
[{"@id":"urn:ucode:_00001C000000000000010000033040F9","@type":"odpt:Bus","dc:date":"2022-06-29T22:28:35+09:00","geo:lat":35.725103,"@context":"http://vocab.odpt.org/context_odpt_Bus.jsonld","geo:long":139.603927,"dct:valid":"2022-06-29T22:29:12+09:00","odpt:note":"620:荻窪駅(上井草)石神井公園駅:63001:1:井草中学校:上井草駅","owl:sameAs":"odpt.Bus:SeibuBus.Ogi14.63001.1.620","odpt:azimuth":348,"odpt:busroute":"odpt.Busroute:SeibuBus.Ogi14","odpt:operator":"odpt.Operator:SeibuBus","odpt:busNumber":"620","odpt:frequency":30,"odpt:busTimetable":"odpt.BusTimetable:SeibuBus.Ogi14.63001.1.5480.Specific.SeibuBus.2.Weekday","odpt:toBusstopPole":"odpt.BusstopPole:SeibuBus.Kamiigusaeki.30020.2","odpt:busroutePattern":"odpt.BusroutePattern:SeibuBus.Ogi14.63001.1","odpt:fromBusstopPole":"odpt.BusstopPole:SeibuBus.Igusachuugakkou.30019.2","odpt:occupancyStatus":"odpt.OccupancyStatus:FewSeatsAvailable","odpt:fromBusstopPoleTime":"2022-06-29T22:27:00+09:00","odpt:startingBusstopPole":"odpt.BusstopPole:SeibuBus.Ogikuboeki.20127.2","odpt:terminalBusstopPole":"odpt.BusstopPole:SeibuBus.Shakujiikouenekiminamiguchi.30031.15"},
位置情報ないじゃん!(笑)
でも。。少し日本語も入っているので、わかりやすいかも??
結論
関東バス・ ブルベーバス とかもあったら。。 バスの乗換案内をGoogleレベルで作れるな!(笑)
ってことで。。 西武バスの場合は、ちゃんとデータがあることがわかりました!!
ちなみに・・
こんな配信サービスもあるみたいですが。。 どうも静的情報だけのようです。