python3 GTFS Realtime を読み込む
Googleのpython用のサンプルコードが手元のpython3の環境で動かなかったので、urllibの部分をアップデートしたものです。
環境構築
GTFS Realtimeはプロトコルバッファ形式でデシリアライズされたバイナリデータです。
プロトコルバッファを何も知らずにデータを展開できるライブラリがあります。
コマンドプロンプトでご自身の環境に合わせて導入してください。
(anacondaにcondaコマンドで入れる方法があれば知りたいです。)
# Using easy_install
easy_install --upgrade gtfs-realtime-bindings
# Using pip
pip install --upgrade gtfs-realtime-bindings
ソースコード
read_gtfs_rt.py3
from google.transit import gtfs_realtime_pb2
import urllib.request, urllib.error
feed = gtfs_realtime_pb2.FeedMessage()
with urllib.request.urlopen('URL OF YOUR GTFS-REALTIME SOURCE GOES HERE') as res:
feed.ParseFromString(res.read())
print(feed) #デバッグ用出力
#以下大幅略
おまけ
宇野バスさんのデータを部分的にCSV風の出力をする
公開元: http://www3.unobus.co.jp/opendata/
注意:Google乗換案内に使われているものと同じデータです。過剰な頻度のアクセスはしないでね。
read_gtfs_rt_uno_bus.py3
from google.transit import gtfs_realtime_pb2
import urllib.request, urllib.error
url ='http://www3.unobus.co.jp/GTFS/GTFS_RT-VP.bin'
feed = gtfs_realtime_pb2.FeedMessage()
with urllib.request.urlopen(url) as res:
feed.ParseFromString(res.read())
#print(feed)
for entity in feed.entity:
print(
entity.id, #車両ID
entity.vehicle.vehicle.id, #車両ナンバー
entity.vehicle.trip.trip_id, #路線番号?
entity.vehicle.timestamp, #車両時刻
entity.vehicle.position.longitude, #車両緯度
entity.vehicle.position.latitude, #車両経度
entity.vehicle.occupancy_status, #混雑度
sep=',')