Skip to content

Instantly share code, notes, and snippets.

@shantanuo
Forked from grantland/README.md
Last active August 29, 2015 14:24
Show Gist options
  • Save shantanuo/ae80043165db0066c270 to your computer and use it in GitHub Desktop.
Save shantanuo/ae80043165db0066c270 to your computer and use it in GitHub Desktop.

NextBus API

http://www.nextbus.com/xmlFeedDocs/NextBusXMLFeed.pdf

Agency list

http://webservices.nextbus.com/service/publicXMLFeed?command=agencyList

Obtain a list of available transit agencies.

<?xml version="1.0" encoding="utf-8" ?>
<body copyright="All data copyright agencies listed below and NextBus Inc 2014.">
  <agency tag="actransit" title="AC Transit" regionTitle="California-Northern"/>
  <agency tag="art" title="Asheville Redefines Transit" regionTitle="North Carolina"/>
  <agency tag="sf-muni" title="San Francisco Muni" shortTitle="SF Muni" regionTitle="California-Northern"/>
</body>

Route list

http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=<agency_tag>

Obtain a list of routes for a given agency. The agency is specified by the "a" parameter in the query string. The tag for the agency is obtained from the agencyList command.

<?xml version="1.0" encoding="utf-8" ?> 
<body copyright="All data copyright San Francisco Muni 2014.">
    <route tag="F" title="F-Market &amp; Wharves"/>
    <route tag="J" title="J-Church"/>
    <route tag="KT" title="KT-Ingleside/Third Street"/>
</body>

Route config

http://webservices.nextbus.com/service/publicXMLFeed?command=routeConfig&a=<agency_tag>&r=<route tag> 

Obtain a list of routes for a given agency. The route is optionally specified by the "r" parameter. The tag for the route is obtained using the routeList command. If the "r" parameter is not specified, all routes for the agency are returned, limited to 100 routes per request.

<?xml version="1.0" encoding="utf-8" ?>
<body copyright="All data copyright San Francisco Muni 2014.">
  <route tag="F" title="F-Market &amp; Wharves" color="555555" oppositeColor="ffffff" latMin="37.7625199" latMax="37.8085899" lonMin="-122.43487" lonMax="-122.39345">
    <stop tag="5184" title="Jones St &amp; Beach St" lat="37.8072499" lon="-122.41737" stopId="15184"/>
    <stop tag="3092" title="Beach St &amp; Mason St" lat="37.80741" lon="-122.4141199" stopId="13092"/>
    <stop tag="3095" title="Beach St &amp; Stockton St" lat="37.8078399" lon="-122.41081" stopId="13095"/>
    <direction tag="F__OBCTRO" title="Outbound to Castro Station via Downtown" name="Outbound" useForUI="true">
      <stop tag="5184" />
      <stop tag="3092" />
      <stop tag="3095" />
    </direction>
    <direction tag="F__IBCTRO" title="Inbound to Fisherman&apos;s Wharf via Downtown" name="Inbound" useForUI="true">
      <stop tag="3311" />
      <stop tag="5687" />
      <stop tag="5691" />
    </direction>
    <path>
      <point lat="37.76252" lon="-122.43487"/>
      <point lat="37.76267" lon="-122.4352"/>
      <point lat="37.76396" lon="-122.43332"/>
      <point lat="37.76569" lon="-122.43114"/>
      <point lat="37.76726" lon="-122.42915"/>
    </path>
    <path>
      <point lat="37.78036" lon="-122.41261"/>
      <point lat="37.7821" lon="-122.4104"/>
      <point lat="37.78389" lon="-122.40814"/>
      <point lat="37.7856499" lon="-122.40589"/>
    </path>
    <path>
      <point lat="37.7856499" lon="-122.40589"/>
      <point lat="37.7875299" lon="-122.40352"/>
      <point lat="37.78861" lon="-122.40216"/>
      <point lat="37.79094" lon="-122.39919"/>
    </path>
  </route>
</body>

Predictions

http://webservices.nextbus.com/service/publicXMLFeed?command=predictions&a=<agency_tag>&r=<route tag>&s=<stop tag>

Obtain predictions associated with a particular stop. There are two ways to specify the stop: 1) using a stopId or 2) by specifying the route and stop tags.​

Predictions for multi stops

http://webservices.nextbus.com/service/publicXMLFeed?command=predictionsForMultiStops&a=<agency_tag>&stops=<stop 1>&stops=<stop 2>&stops=<stop 3> 

To obtain predictions associated with multiple stops use the "predictionsForMultiStops" command. The stops are specified by using the "stops" parameter multiple times.

Schedule

http://webservices.nextbus.com/service/publicXMLFeed?command=schedule&a=<agency_tag>&r=<route_tag>

Obtain the schedule information for a route. The route is specified by the "r" parameter. The tag for the route is obtained using the routeList command.

Messages

http://webservices.nextbus.com/service/publicXMLFeed?command=messages&a=<agency tag>&r=<route tag1>&r=<route tagN> 

Obtain messages currently active for a route or a group of routes. Note: this command only returns currently active messages. If a message is configured just to be shown on Tuesdays for example but it is currently Wednesday then the message will not be listed.

Vehicle locations

http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=<agency_tag>&r=<route tag>&t=<epoch time in msec> 

Obtain a list of vehicle locations that have changed since the last time the vehicleLocations command was used. The "t" parameter specifies the last time that was returned by the vehicleLocations command. The time is in msec since the 1970 epoch time. If you specify a time of 0, then data for the last 15 minutes is provided.

@shantanuo
Copy link
Author

Agency list
http://webservices.nextbus.com/service/publicXMLFeed?command=agencyList

We will select "San Francisco Muni" service with tag sf-muni

Route list
http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=sf-muni

We need the bus titled "F-Market & Wharves" that has tag of F

Route config
http://webservices.nextbus.com/service/publicXMLFeed?command=routeConfig&a=sf-muni&r=F

Let's check the path of the bus route. This includes the point in latutude and longitude.

Predictions
http://webservices.nextbus.com/service/publicXMLFeed?command=predictions&a=sf-muni&r=F&s=5184

When is the next bus expected at stop number 5184?

Schedule
http://webservices.nextbus.com/service/publicXMLFeed?command=schedule&a=sf-muni&r=F

All schedules of that bus

Messages:
http://webservices.nextbus.com/service/publicXMLFeed?command=messages&a=sf-muni&r=F

Show message if any.

Vehicle Locations:
http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=sf-muni&r=F&t=0

Current vehicle location

@shantanuo
Copy link
Author

from urllib2 import urlopen
from BeautifulSoup import BeautifulStoneSoup

def nextbus(a, r, c="vehicleLocations", e=0):
"""Returns the most recent latitude and
longitude of the selected bus line using
the NextBus API (nbapi)"""
nbapi = "http://webservices.nextbus.com"
nbapi += "/service/publicXMLFeed?"
nbapi += "command=%s&a=%s&r=%s&t=%s" % (c,a,r,e)
gpx=urlopen(nbapi)
soup = BeautifulStoneSoup(gpx.read())
return soup.vehicle['lat'], soup.vehicle['lon']

Nextbus API agency and bus line variables

agency = "sf-muni"
route = "F"
lat, lon = nextbus(agency, route)
print ('http://maps.google.com/maps?z=12&t=m&q=loc:%s+%s' % (lat, lon))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment