跳轉到

JavaScript GTFS-Realtime語言綁定

npm 版本

提供從GTFS-realtime ProtocolBuffer 規範生成的 JavaScript 類及其關聯類型。這些類將允許您將二進制 ProtocolBuffer GTFS-realtime 數據饋送解析為 JavaScript 對象。

這些綁定旨在用於Node.js環境,但通過一些努力,它們也可能用於其他 JavaScript 環境。

我們使用ProtoBuf.js庫來支持 JavaScript Protocol Buffer。

添加依賴項

要在您自己的項目中使用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語法)。您可以通過將import轉換為require並安裝node-fetch@2來使用 CommonJS。在此處了解有關 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 類的命名約定的更多詳細信息,請查看我們用來處理 Protocol Buffer 序列化的ProtoBuf.js 項目