我正在向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/

10-10 03:05