[hackpgh-discuss] Bus stop API

  • From: Matthew Beckler <matthew@xxxxxxxxxxxx>
  • To: hackpgh-discuss@xxxxxxxxxxxxx
  • Date: Tue, 12 Oct 2010 16:26:49 -0400

I know that someone mentioned that we have a bus stop sign hanging out
in the shop, with the grand idea to have it light up or otherwise
indicate when a bus is coming soon. I suppose the first step towards
that is figuring out how to get that data, so this afternoon I took a
snack break and got something working.

There is a website called RouteShout that parses the General Transit
Feed Spec (GTFS)[0] feed that transit agencies publish so Google can
provide transit info on google maps. RouteShout provides an easy and
useful web API around that data (http://www.routeshout.com/main/api)
that is pretty slick.

I registered for an API key, and wrote a chunk of python to do what we
need. There is lots of info available, but all we really need to do is
to "Get a list of upcoming stops for a specific agency and stop (within
next 2 hours)". For my key, the PA, and the HackPGH bus stop on
Jumonville at Watson, this is the url to fetch:

http://api.routeshout.com/rs.stops.getTimes
?key=361099f484000362836fca4cc320085d
&agency=paac
&stop=E33040

The API call returns a "webpage" that looks something like this,
slightly trimmed:
{
    "response": {
            "timezone": "America/New_York",
            "times": [
                {
                    "type": "scheduled",
                    "arrival_time": "03:49 PM",
                    "departure_time": "03:49 PM",
                    "route_short_name": "71D",
                    "route_long_name": "HAMILTON - VIA
OAKLAND-SHADYSIDE-5TH AV - OR"
                },
                {
                    "type":"scheduled",
                    "arrival_time":"03:50 PM",
                    "departure_time":"03:50 PM",
                    "route_short_name":"71C",
                    "route_long_name":"POINT BREEZE - VIA
OAKLAND-SHADYSIDE-CENTRE AV - OR"
                },
                ...
        ]
        }
        "status": "ok"
}

I wrote a little bit of python to fetch and parse this data, giving us
results like this:

matthew@broderick$ ./get_stop_data.py
Status: ok
Timezone: America/New_York
04:16 PM
    71A
    NEGLEY - VIA OAKLAND-SHADYSIDE-CENTRE AV - OR
04:17 PM
    500
    HIGHLAND PK - DOWNTOWN-OAKLAND-ZOO - OA
04:20 PM
    71D
    HAMILTON - VIA OAKLAND-SHADYSIDE-5TH AV - OR

Seems like this is a good first step towards getting some sort of bus
alert system going. I'll go ahead and add this information and my script
to the wiki.

Thanks,
Matthew

[0] http://code.google.com/transit/spec/transit_feed_specification.html


Other related posts: