JavaScript GTFS-Realtime語言綁定¶
提供從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 項目。