跳转至

JavaScript GTFS-realtime语言绑定

npm版本

提供从GTFS-realtime ProtocolBuffer规范中生成的JavaScript类及其相关类型。 这些类将允许你将二进制的ProtocolBuffer GTFS-realtime数据源解析为JavaScript对象。

这些绑定被设计为在Node.js环境中使用,但经过一些努力,它们可能也可以在其他JavaScript环境中使用。

我们使用ProtoBuf.js库来支持JavaScript协议缓冲区。

添加依赖关系

要在你自己的项目中使用gtfs-realime-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类的命名规则的更多细节,请查看ProtoBuf.js项目我们用它来处理我们的协议缓冲区序列化。