Streaming GTFS and GTFS-RT parser for node.
npm install gtfs-stream --save
import gtfs from 'gtfs-stream'
request.get('https://developers.google.com/transit/gtfs/examples/sample-feed.zip') // or any other way of getting the data stream
.pipe(gtfs())
.on('data', (entity) => {
console.log(entity)
})
Data events emitted from the GTFS parse stream have the following shape:
If you want the raw rows, you can pass { raw: true }
to this function to skip type inference.
The base GTFS format is cumbersome to work with, so the enhanced parser will do a little extra work piecing things together to make it more usable. This parser will use more memory than the base parser since it needs to collect rows that need formatting while it waits for other to stream in.
import gtfs from 'gtfs-stream'
request.get('https://developers.google.com/transit/gtfs/examples/sample-feed.zip') // or any other way of getting the data stream
.pipe(gtfs.enhanced())
.on('data', (entity) => {
console.log(entity)
})
Differences from the base parser:
trip
types have a new path
attribute that is a GeoJSON LineString, and shape_id
is removedstop
types have a new schedule
attribute that is a collection of stop timesroute
types have a human-readable route_type
stop
types have a human-readable vehicle_type
, location_type
, and wheelchair_boarding
shape
or stop_time
types, since they are collected into their relevant entriesimport gtfs from 'gtfs-stream'
request.get('http://datamine.mta.info/mta_esi.php') // or any other way of getting the data stream
.pipe(gtfs.rt())
.on('data', (entity) => {
console.log(entity)
})
Data events emitted from the GTFS Realtime parse stream have the following shape:
Only one of either trip_update, vehicle, or alert will be present in any given event.