2017-11-30 11 views
1

を養う私はこのページのフィードのURLのいずれかのhttps://www.mbta.com/developers/gtfs-realtimeノードMBTAの旅の更新が

を使用したい解析するGTFSリアルタイム結合使い方私は、新しいプロジェクトフォルダ内の依存関係を追加しました。だから私のapp.jsファイルは次のようになり、その後githubのプロジェクトページから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); 
      } 
     }); 
    } 
}); 

はしかし、私がすると、次のエラーメッセージが出続けます私は '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フィード解析です。

答えて

1

そのページのサンプルコードが間違っているようです。

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

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

を交換し、期待通りのコードは動作します。

gtfs-realtime.protoファイルには、GTFSリアルタイムメッセージの形式と圧縮バイナリprotobufメッセージにエンコードする方法が記述されています。 protobuf(gtfs-realtime-bindings)を読み込むために使用しているノードパッケージは、すでにprotobufのデコードを担当しているので、protoファイルを自分でインクルードする必要はありません。

関連する問題