2

https://github.com/dcodeIO/ProtoBuf.jsを使用して triments gtfs データを解析しようとしています。

ここに私がこれまでに持っているコードがあります.protoファイルを正しく解析し、ビルダーを作成し、期待されるすべてのプロパティとメソッドを持っています.それでデータをデコードしようとするとエラーがスローされます.

Error: Data must be corrupt: Buffer overrun

proto ファイルはhttps://developers.google.com/transit/gtfs-realtime/gtfs-realtime-protoからのものです

var ProtoBuf = require('protobufjs')
  , request = require('request')

var transit = ProtoBuf.protoFromFile('gtfs-realtime.proto').build('transit_realtime')

request('http://developer.trimet.org/ws/V1/FeedSpecAlerts/?appID=618F30BB3062F39AF24AED9EC', parse)

function parse(err, res, body) {
  try {
    console.log(transit.FeedMessage.decode(res.body))
  } catch(e) {
    console.log(e)
  }
}

Brian Ferris のおかげで、ヘッダーの最初の部分を解析できましたgtfs_realtime_version: "1"が、パーサーは次のコンポーネント (タイムスタンプ uint64) で失敗しました。

おかげで

4

5 に答える 5

1

requestモジュールに強制的にヌル エンコーディングを持たせることで、(ニューヨークの MTA フィードで) これを動作させることができました。これにより、文字列ではなくバッファが返されるようになりました。そのようです:

request({
    url: 'http://developer.trimet.org/ws/V1/FeedSpecAlerts/?appID=618F30BB3062F39AF24AED9EC'
    encoding: null
}, parse)

その後、解析は正常に機能しているように見えます。

于 2014-07-03T14:30:53.047 に答える
0

私はノードの専門家ではありませんが、GTFS リアルタイム フィードのルート メッセージ タイプは「FeedMessage」です。

https://developers.google.com/transit/gtfs-realtime/reference

フィードを「アラート」メッセージとして解析しようとしているようです:

console.log(transit.Alert.decode(res.body))

Alert を FeedMessage に変更してみて、何が起こるか見てみましょう。

于 2013-08-30T05:43:21.007 に答える
0

これで問題は解決しませんが、http: //developer.trimet.org/ws/V1/FeedSpecAlerts/appid/618F30BB3062F39AF24AED9EC/text/true のような URL を使用してテキストで RT フィードを取得できます

node-gtfsモジュールも参照してください。

于 2013-08-30T03:09:49.770 に答える