我正在向API发送get请求,以查找公共交通实时位置。在他们的文档中,他们指出它返回了两个协议缓冲区文件。
问题是,我正在用python编程,找不到关于如何处理这些返回文件的任何资源。我在网上搜索的有关协议缓冲区文件的大多数信息是如何创建一个(序列化)。
是否有示例代码显示如何处理(反序列化?)包含协议缓冲区文件的返回get请求?
抱歉,如果我误解或使用了错误的术语,请告知我是否拥有!
我找到的唯一文件Here阐明了它返回了两个协议文件以及返回内容的structure(?)
最佳答案
3.1.1章链接文档中的,表明该数据符合Google发布的参考,包括指向相关页面的链接。该页面包含数据的.proto定义。
3.1.1 GTFS符合性
GTFS套件符合Google在2016年2月3日发布的规范参考。GTFS实时提要也与Google在2015年2月26日发布的GTFS参考兼容。这两个提要组件规范的参考都可以在下面找到。网址:
GTFS套件参考:https://developers.google.com/transit/gtfs/reference
GTFS实时参考:https://developers.google.com/transit/gtfs-realtime/reference
从网站下载gtfs-realtime.proto文件,然后使用protoc --python_out=. gtfs-realtime.proto
进行编译。这将创建一个gtfs_realtime_pb2.py
,您可以像这样使用:
import requests
import gtfs_realtime_pb2
api_key = "<Your API key>"
session = requests.Session()
session.headers.update({"Authorization": "apikey " + api_key})
response = session.get("https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/nswtrains")
message = gtfs_realtime_pb2.FeedMessage()
message.ParseFromString(response.content)
print(message)
对于这样的输出
header {
gtfs_realtime_version: "1.0"
incrementality: FULL_DATASET
timestamp: 1575847311
}
entity {
id: "1"
vehicle {
trip {
trip_id: "165.011219.127.0840"
schedule_relationship: SCHEDULED
route_id: "4T.C.165"
}
position {
latitude: -28.636098861694336
longitude: 153.54798889160156
bearing: 273.8424072265625
}
timestamp: 1575847282
congestion_level: UNKNOWN_CONGESTION_LEVEL
stop_id: "24811"
vehicle {
id: "165"
label: "08:40am (165) Casino - Tweed Heads"
}
}
}
entity {
id: "2"
...
关于python - 处理返回的 Protocol Buffer 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59235151/