コンテンツにスキップ

JavaScript GTFS-realtime言語バインディング

npmバージョン

GTFS-realtimeのProtocolBuffer仕様から生成されたJavaScriptクラスとその関連型を提供します。 これらのクラスにより、バイナリ ProtocolBuffer 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を使用するには、importrequireに変換して、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>",
        // replace with your GTFS-realtime source's auth token
        // e.g. x-api-key is the header value used for NY's MTA GTFS APIs
      },
    });
    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クラスの命名規則の詳細については、ProtoBuf.jsプロジェクトをご覧ください。このプロジェクトは、プロトコルバッファのシリアライズを処理するために使用されます。