使用节点gtfs-realtime-binding来parsingMBTA行程更新提要

我想使用此页面上的任何Feed URLS https://www.mbta.com/developers/gtfs-realtime

我在一个新的项目文件夹中添加了依赖项。 然后用github项目页面的代码片段创build一个文件app.js https://github.com/google/gtfs-realtime-bindings/tree/master/nodejs

所以我的app.js文件看起来像这样…

var GtfsRealtimeBindings = require('gtfs-realtime-bindings'); var request = require('request'); var requestSettings = { method: 'GET', url: 'http://developer.mbta.com/lib/GTRTFS/Alerts/TripUpdates.pb', encoding: null }; request(requestSettings, function (error, response, body) { if (!error && response.statusCode == 200) { var feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(body); feed.entity.forEach(function (entity) { if (entity.trip_update) { console.log(entity.trip_update); } }); } }); 

但是,我不断收到以下错误信息,当我键入节点app.js'

 TypeError: Cannot read property 'FeedMessage' of undefined at Request._callback (C:\wamp64\www\dev\gtfs\app.js:11:57) at Request.self.callback (C:\wamp64\www\dev\gtfs\node_modules\request\request.js:186:22) at emitTwo (events.js:106:13) at Request.emit (events.js:191:7) at Request.<anonymous> (C:\wamp64\www\dev\gtfs\node_modules\request\request.js:1163:10) at emitOne (events.js:96:13) at Request.emit (events.js:188:7) at IncomingMessage.<anonymous> (C:\wamp64\www\dev\gtfs\node_modules\request\request.js:1085:12) at IncomingMessage.g (events.js:291:16) at emitNone (events.js:91:20) 

任何线索,我在这里失踪,或做错了?

还有什么想法“gtfs-realtime.proto”文件用于? 是否/我应该把它包括在我的项目文件夹中? https://developers.google.com/transit/gtfs-realtime/gtfs-realtime-proto

谢谢,我感谢你的帮助,这是我第一次parsinggtfs提要。

该页面上的示例代码似乎是错误的。 更换

 var feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(body); 

 var feed = GtfsRealtimeBindings.FeedMessage.decode(body); 

代码将按预期工作。

gtfs-realtime.proto文件描述了GTFS实时消息的格式,以及如何将它们编码成压缩的二进制protobuf消息。 你用来读取protobuf( gtfs-realtime-bindings )的节点包已经为你解码protobuf了,所以你不需要自己包含proto文件。