【问题标题】:Using node gtfs-realtime-binding to parse MBTA trip updates feed使用节点 gtfs-realtime-binding 解析 MBTA 行程更新提要
【发布时间】:2017-11-30 17:09:43
【问题描述】:

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

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

所以我的 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);
            }
        });
    }
});

但是,当我输入“node 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

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

【问题讨论】:

    标签: node.js npm gtfs


    【解决方案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 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2021-03-07
      • 1970-01-01
      相关资源
      最近更新 更多