JavaScript GTFS-realtime 言語バインディング¶
GTFS-realtime Protocol Buffer 仕様から生成された JavaScript クラスとその関連型を提供します。これらのクラスを使用することで、バイナリ形式の Protocol Buffer GTFS-realtime データフィードを JavaScript オブジェクトに変換して解析することができます。
これらのバインディングは Node.js 環境で使用することを目的としていますが、多少の工夫をすれば他の JavaScript 環境でも使用できる可能性があります。
JavaScript における Protocol Buffer のサポートには ProtoBuf.js ライブラリを使用しています。
依存関係の追加¶
gtfs-realtime-bindings
クラスを自身のプロジェクトで使用するには、まず Node.js npm パッケージ をインストールする必要があります。
npm install gtfs-realtime-bindings
コード例¶
以下の Node.js コードスニペットは、特定の URL から GTFS-realtime データフィードをダウンロードし、それを FeedMessage(GTFS-realtime スキーマのルート型)としてパースし、結果を反復処理する方法を示しています。
この例を動作させるためには、まず NPM で node-fetch
をインストールしなければなりません。
注意: この例は ES モジュール(import
/export
構文)を使用しており、CommonJS(require
構文)とは互換性がありません。CommonJS を使用する場合は、import
を require
に変換し、node-fetch@2
をインストールしてください。ES モジュールについての詳細は こちら を参照してください。
import GtfsRealtimeBindings from "gtfs-realtime-bindings";
import fetch from "node-fetch";
(async () => {
try {
const response = await fetch("<GTFS-realtime source URL>", {
headers: {
"x-api-key": "<redacted>",
// あなたの GTFS-realtime ソースの認証トークンに置き換えてください
// 例: x-api-key は NY の MTA GTFS API で使用されるヘッダー値です
},
});
if (!response.ok) {
const error = new Error(`${response.url}: ${response.status} ${response.statusText}`);
error.response = response;
throw error;
process.exit(1);
}
const buffer = await response.arrayBuffer();
const feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(
new Uint8Array(buffer)
);
feed.entity.forEach((entity) => {
if (entity.tripUpdate) {
console.log(entity.tripUpdate);
}
});
}
catch (error) {
console.log(error);
process.exit(1);
}
})();
gtfs-realtime.proto から生成された JavaScript クラスの命名規則についての詳細は、Protocol Buffer のシリアライズ処理に使用している ProtoBuf.js プロジェクト を参照してください。