Lewati ke isi

Binding Bahasa GTFS-realtime JavaScript

versi npm

Menyediakan kelas JavaScript dan jenis terkaitnya yang dihasilkan dari spesifikasi ProtocolBuffer GTFS-realtime . Kelas ini akan memungkinkan Anda mengurai feed data GTFS-realtime biner ProtocolBuffer ke dalam objek JavaScript.

Binding ini dirancang untuk digunakan di lingkungan Node.js , tetapi dengan sedikit usaha, mereka mungkin juga dapat digunakan di lingkungan JavaScript lainnya.

Kami menggunakan perpustakaan ProtoBuf.js untuk dukungan Penyangga Protokol JavaScript.

Tambahkan Ketergantungan

Untuk menggunakan kelas gtfs-realtime-bindings di proyek Anda sendiri, Anda harus menginstal paket npm Node.js kami terlebih dahulu :

npm install gtfs-realtime-bindings

Kode Contoh

Cuplikan kode Node.js berikut menunjukkan pengunduhan umpan data GTFS-realtime dari URL tertentu, menguraikannya sebagai FeedMessage (jenis root dari skema GTFS-realtime), dan mengulangi hasilnya.

Agar contoh ini berfungsi, Anda harus terlebih dahulu menginstal node-fetch dengan NPM.

Catatan: contoh ini menggunakan modul ES ( import / export sintaks) dan tidak kompatibel dengan CommonJS ( require sintaks). Anda dapat menggunakan CommonJS dengan mengonversi import untuk require dan memasang node-fetch@2 . Pelajari lebih lanjut tentang modul ES di sini .

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);
  }
})();

Untuk detail lebih lanjut tentang konvensi penamaan kelas JavaScript yang dihasilkan dari gtfs-realtime.proto , lihat proyek ProtoBuf.js yang kami gunakan untuk menangani serialisasi Protocol Buffer kami.