GTFS 实时数据:如何将打印到终端的 Feed 消息转换为 GTFS

GTFS Real Time Data: How to Convert Feed Message Print to Terminal to GTFS

我已经按照这个例子做了 link

获取历史 GTFS 实时数据馈送,然后使用 python 语言绑定将 gtfs_rt.FeedMessage 输出到终端。

在我把它打印到终端后,我完全不知道下一步该做什么。 我一直在尝试找到一种方法来读取终端输出,然后希望将提要消息转换为 JSON 格式?理想情况下,我希望它与静态数据的 GTFS 数据格式相当,以便我可以计算延迟时间等。

谢谢!

具体答案取决于您要对提要执行的操作。但总的来说,你有两个选择。

第一个选项是直接解析 FeedMessage 对象。一般 Python protobuf 参考 here will be useful to you, and the specific protocol for GTFS-rt is here。例如,解析消息后,您可以像这样获取提要中所有行程的车辆 ID 和行程 ID:

for feed_entity in msg.entity:
    if feed_entity.hasField('trip_update'):
        tu = feed_entity.trip_update
        vid = tu.vehicle.vehicle.id
        tid = tu.trip.trip_id
        print "vehicle {} is covering trip {}".format(vid, tid)

但这完全取决于您想从提要中获得什么。如果您对延迟感兴趣,您可能会解析 StopTimeUpdate 对象(但请注意,如果车辆已经 arrived/departed 停止,这些对象可以包含 past/current 实际延迟,或未来预计的延迟稍后在路线上停靠)。

如果你更喜欢使用字典而不是直接使用 protobuf 消息,我已经成功地完成了项目 protobuf-to-dict(参见 here),它可以通过 pip 安装。我通常发现在 Python 中使用字典比在 protobuf 对象中更自然。