使用节点gtfs-realtime-binding来解析MBTA trip trip updates

时间:2017-11-30 17:09:43

标签: node.js npm gtfs

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

我在新项目文件夹中添加了依赖项。然后使用github项目页面中的代码片段创建了一个文件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)

关于我在这里缺少什么,或做错了什么的线索?

还有什么想法&#34; gtfs-realtime.proto&#34;文件用于?是否/我应该将它包含在我的项目文件夹中? https://developers.google.com/transit/gtfs-realtime/gtfs-realtime-proto

谢谢,感谢您的帮助,这是我第一次解析gtfs feed。

1 个答案:

答案 0 :(得分:1)

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

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文件。