cta-bus-tracker

A Node.js package for the Chicago Transit Authority's bus tracker API. For complete details regarding the data returned for each method, check out the CTA's documentation: http://www.transitchicago.com/assets/1/developer_center/BusTime_Developer_API_Guide.pdf

Usage no npm install needed!

<script type="module">
  import ctaBusTracker from 'https://cdn.skypack.dev/cta-bus-tracker';
</script>

README

A Node.js package for the Chicago Transit Authority's bus tracker API. For complete details regarding the data returned for each method, check out the CTA's documentation: http://www.transitchicago.com/assets/1/developer_center/BusTime_Developer_API_Guide.pdf

Key Features

  • JSON is returned instead of the CTA's crappy XML
  • All date properties are converted from strings formatted like "YYYYMMDD HH:MM:SS" to a normal JavaScript date strings like "2014-08-30T14:53:34-05:00"

Install It

npm install cta-bus-tracker

Require It

var cta = require( "cta-bus-tracker" );

Initialize It

var busTracker = cta( "your CTA API KEY" );

Time

busTracker.time( function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

"2014-08-30T14:53:34-05:00"

Vehicles By ID

// a list of up to 10 vehicle IDs
var vehicleIds = [ "1973" ];

busTracker.vehiclesById( vehicleIds, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

{
    vid: '1973',
    tmstmp: '2014-08-30T14:55:00-05:00',
    lat: '41.949149812970845',
    lon: '-87.64872932434082',
    hdg: '287',
    pid: '4735',
    rt: '8',
    des: '79th',
    pdist: '318',
    spd: '0',
    tablockid: '8 -752',
    tatripid: '139',
    zone: ''
}

Note: If more than one vehicle ID is provided data will be an array of objects.


Vehicles By route

// a list of up to 10 vehicle IDs
var routeIds = [ "8" ];

busTracker.vehiclesById( routeIds, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        vid: '1973',
        tmstmp: '2014-08-30T15:05:00-05:00',
        lat: '41.93126130439866',
        lon: '-87.64894748741472',
        hdg: '173',
        pid: '4735',
        rt: '8',
        des: '79th',
        pdist: '7027',
        spd: '23',
        tablockid: '8 -752',
        tatripid: '139',
        zone: ''
    },
    ...
]

Routes

busTracker.routes( function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        rt: '1',
        rtnm: 'Bronzeville/Union Station',
        rtclr: '#336633'
    },
    ...
]

Route Directions

var routeId = "1";

busTracker.routeDirections( routeId, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    'Northbound',
    'Southbound'
]

Stops

var routeId = "1";
var routeDirection = "Northbound";

busTracker.stops( routeId, routeDirection, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        stpid: '1577',
        stpnm: '1509 S Michigan',
        lat: '41.861838603628',
        lon: '-87.623975872993'
    },
    ...
]

Patterns By ID

// a list of up to 10 pattern IDs
var parrernIds = [ "4735" ];

busTracker.patternsById( patternIds, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

{
    pid: '4735',
    ln: '74252.0',
    rtdir: 'Southbound',
    pt:
    [
        {
            seq: '1',
            lat: '41.949815854453',
            lon: '-87.649156451225',
            typ: 'S',
            stpid: '5756',
            stpnm: 'Halsted & Waveland/Broadway Terminal',
            pdist: '0.0'
        },
        ...
    ]
}

Note: If more than one pattern ID is provided data will be an array of objects.


Patterns By Route

// a list of up to 10 pattern IDs
var routeId = "1";

busTracker.patternsByRoute( routeId, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        pid: '4735',
        ln: '74252.0',
        rtdir: 'Southbound',
        pt:
        [
            {
                seq: '1',
                lat: '41.949815854453',
                lon: '-87.649156451225',
                typ: 'S',
                stpid: '5756',
                stpnm: 'Halsted & Waveland/Broadway Terminal',
                pdist: '0.0'
            },
            ...
        ]
    },
    ...
]

Predictions By Stop

var options = {
    // a list of up to 10 stop IDs
    stopIds: [ "1577" ],
    // topCount is optional
    topCount: 5
};

busTracker.predictionsByStop( options, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        tmstmp: '2014-08-30T15:26:00-05:00',
        typ: 'A',
        stpnm: '1509 S Michigan',
        stpid: '1577',
        vid: '1261',
        dstp: '7564',
        rt: '4',
        rtdir: 'Northbound',
        des: 'Illinois Center',
        prdtm: '2014-08-30T15:34:00-05:00',
        tablockid: '4 -715',
        tatripid: '126',
        zone: ''
    },
    ...
]

Predictions By Vehicle

var options = {
    // a list of up to 10 vehicle IDs
    vehicleIds: [ "1230" ],
    // topCount is optional
    topCount: 5
};

busTracker.predictionsByVehicle( options, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        tmstmp: '2014-08-30T15:31:00-05:00',
        typ: 'A',
        stpnm: 'Halsted & Addison',
        stpid: '14901',
        vid: '1230',
        dstp: '86',
        rt: '8',
        rtdir: 'Southbound',
        des: '79th',
        prdtm: '2014-08-30T15:31:00-05:00',
        tablockid: '8 -706',
        tatripid: '145',
        zone: ''
    },
    ...
]

Service Bulletins By Route

var options = {
    // a list of up to 10 route IDs
    routeIds: [ "1" ],
    // routeDirection is optional
    routeDirection: "Northbound"
};

busTracker.serviceBulletinsByRoute( options, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        nm: '#36 Broadway - Bus Stop Relocation',
        sbj: ' Bus Stop Relocation',
        dtl: 'Effective Wed, May 7<br/><br/>The northbound #36 bus stop on the northeast corner at Broadway/Granville has been relocated to the southeast corner at Broadway/Granville.<br/> <br/>',
        brf: '',
        prty: 'Low'
    },
    ...
]

Service Bulletins By Route

// a list of up to 10 stop IDs
var stopIds = [ "1577" ];

busTracker.serviceBulletinsByStop( stopIds, function ( err, data ) {
    if ( err ) {
        // handle error
    }
    // use data
} );

Example data:

[
    {
        nm: '3 K. Drive buses are temp rerouted at K Drive/79th',
        sbj: '# 3 King Drive buses rerouted',
        dtl: '#3 King Drive buses are temporarily rerouted in both directions via King Drive, 79th, Cottage Grove, 83rd, and King Drive, due to street blockage.<br/><br/>Allow extra travel time.<br/> <br/>',
        brf: '',
        prty: 'Medium',
        srvc: { rt: '3' }
    },
    ...
]