Need help with MTAPI?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

jonthornton
217 Stars 59 Forks 86 Commits 4 Opened issues

Description

JSON proxy server for the MTA's realtime New York City subway feed

Services available

!
?

Need anything else?

Contributors list

# 46,344
JavaScr...
CSS
Shell
transit
76 commits
# 506,492
Python
transit
mta
3 commits
# 584,333
Python
transit
mta
1 commit
# 491,905
PHP
HTML
transit
mta
1 commit

MTA Realtime API JSON Proxy

MTAPI is a small HTTP server that converts the MTA's realtime subway feed from Protocol Buffers/GTFS to JSON. The app also adds caching and makes it possible to retrieve information by location and train line.

Active Development

This project is under active development and any part of the API may change. Feedback is very welcome.

Running the server

MTAPI is a Flask app designed to run under Python 3.3+.

  1. Create a
    settings.cfg
    file. A sample is provided as
    settings.cfg.sample
    .
  2. Set up your environment and install dependencies.
    $ python3 -m venv .venv

    $ source .venv/bin/activate

    $ python3 -m pip install -r requirements.txt
  3. Run the server
    $ python app.py

If your configuration is named something other than

settings.cfg
, set the
MTAPI_SETTINGS
env variable to your configuration path.

This app makes use of Python threads. If running under uWSGI include the --enable-threads flag.

Endpoints

Endpoints to retrieve train data and sample input and output are listed here.

Settings

  • MTA_KEY (required)
    The API key provided at hhttps://api.mta.info/#/signup default: None

  • STATIONS_FILE (required)
    Path to the JSON file containing station information. See Generating a Stations File for more info.
    default: None

  • CROSS_ORIGIN
    Add CORS headers to the HTTP output.
    default: "*" when in debug mode, None otherwise

  • MAX_TRAINS
    Limits the number of trains that will be listed for each station.
    default: 10

  • MAX_MINUTES
    Limits how far in advance train information will be listed.
    default: 30

  • CACHE_SECONDS
    How frequently the app will request fresh data from the MTA API.
    default: 60

  • THREADED
    Enable background data refresh. This will prevent requests from hanging while new data is retreived from the MTA API.
    default: True

  • DEBUG
    Standard Flask option. Will enabled enhanced logging and wildcard CORS headers.
    default: False

Generating a Stations File

The MTA provides several static data files about the subway system but none include canonical information about each station. MTAPI includes a script that will parse the

stops.txt
and
transfers.txt
datasets provided by the MTA and attempt to group the different train stops into subway stations. MTAPI will use this JSON file for station names and locations. The grouping is not perfect and editing the resulting files is encouraged.

Usage: ``` $ python makestationscsv.py stops.txt transfers.txt > stations.csv

edit groupings in stations.csv

$ python makestationsjson.py stations.csv > stations.json

edit names in stations.json

## Help

Submit a GitHub Issues request.

Projects

Here are some projects that use MTAPI.

License

The project is made available under the MIT license.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.