示例#1
0
	def test_get_all_regions( self ):
		# Regression test for main method

		# Get regions 
		regionOptionsURL = "http://regions.onebusaway.org/regions-v3.xml"
		#regionServerResponse = probeForResponse( regionOptionsURL )
		#writeToFile( regionServerResponse, "res/all_regions.xml" )    

		regionServerResponse = readFromFile("res/all_regions.xml")
		regionDict = convertToDict( regionServerResponse )
		regionsList = BusWorker.makeRegions( regionDict ) 
		assert( regionsList != None )

		ex_lat = 38.8950905
		ex_lon = -77.059198

		print( "user coordinate is supported? " + str(BusWorker.getRegionFromCoordinates(regionsList, ex_lat, ex_lon)) )
		self.assertTrue( BusWorker.getRegionFromCoordinates(regionsList, ex_lat, ex_lon) )
示例#2
0
def main():
	"""
		Connect to the OneBusAway server and
		perform certain behaviors.
	"""
	global currLat
	global currLong

	readCommandLineArgs()

	# Get all possible regions
	regionOptionsURL = "http://regions.onebusaway.org/regions-v3.xml"
	regionServerResponse = probeForResponse( regionOptionsURL )
	regionDict = convertToDict( regionServerResponse )
	regionsList = BusWorker.makeRegions( regionDict )
	
	# Determines if user location is supported by the server
	user_region = BusWorker.getRegionFromCoordinates(regionsList, currLat, currLong)
	
	if( user_region == None ):
		print("Your location is not supported,", end=" ")
		print("or you live in a region without bus services!")
		sys.exit()
		
	serverURL = user_region.getRegionURL()
	
	# Get API key for OBA
	OBA_APIKey = getAPIKey( "keys/OBA_API.key" )

	# Get all bus stops near input location
	nearbyStopURL = serverURL + "api/where/stops-for-location.xml?key=" + \
		OBA_APIKey + "&lat=" + str(currLat) + "&lon=" + str(currLong)
	serverResponse = probeForResponse( nearbyStopURL )
	stopDict = convertToDict( serverResponse )

	# Store nearest stop information
	try:
		allStops = BusWorker.makeStops( stopDict )
	except AssertionError as x:
		print( x )
		sys.exit()	
		
	# Display bus stops
	chosenStopNdx = BusWorker.displayBusStops( allStops )

	print()
	print("--> You chose bus stop:")
	print(allStops[chosenStopNdx])

	# Get arrival information for a stop
	stopURL = serverURL + "where/arrivals-and-departures-for-stop/" + \
			 allStops[chosenStopNdx].getStopID() + ".xml?key=" + OBA_APIKey
	
	timeServerResponse = probeForResponse( stopURL )
	timeDict = convertToDict( timeServerResponse )

	# Get route for chosen stop
	try:
		allRoutes = BusWorker.makeRoutes( timeDict )
	except AssertionError as x:
		print( x )
		sys.exit()

	# Display bus routes
	chosenRouteNdx = BusWorker.displayBusRoutes( allRoutes )

	chosenStop = allStops[chosenStopNdx]
	stopLat = chosenStop.getLat()
	stopLong = chosenStop.getLong()

	# API Key for Google Maps
	GOOGLE_APIKey = getAPIKey( "keys/GOOGLE_API.key")
	distanceTimeURL = "https://maps.googleapis.com/maps/api/distancematrix/xml?" + \
			"origins=" + str(currLat) + "," + str(currLong) + "&destinations=" + \
			str(stopLat) + "," + str(stopLong) + "&mode=walking" + "&key=" + str(GOOGLE_APIKey)
	googleResponse = probeForResponse( distanceTimeURL )	
	googleDict = convertToDict( googleResponse )

	print()
	print("----------------------- RESULTS -----------------------")
	print()
	print( "--> You are at location (" + str(currLat) + "," + str(currLong) + "), which is at address:" )
	print( "\t" + str(googleDict['origin_address']) )
	print( "--> The bus stop is at location (" + str( stopLat ) + \
			 "," + str( stopLong ) + "), which is at address:" )
	print( "\t" + str(googleDict['destination_address']) )
	print()
	curTime = makeEpochReadable( int(timeDict['currentTime']) )
	print( "--> The current time is:\t" + str(curTime) )
	arriv = int( allRoutes[chosenRouteNdx].getArrivalTime() )
	busArrivalTime = makeEpochReadable( arriv )
	print( "--> The bus will arrive at:\t" + str(busArrivalTime) )
	print()

	# Time information in seconds
	busArrivalInterval = hmsToSeconds( str(busArrivalTime - curTime) )
	getToBusInterval = int( googleDict['row']['element']['duration']['value'] )

	print( "--> The bus will arrive in " + str( int(busArrivalInterval / 60) ) + " mins")
	print( "--> It will take you " + str( googleDict['row']['element']['duration']['text']) + \
			" to walk to the bus stop.")

	# Print out final results
	if( getToBusInterval > ( busArrivalInterval + 60 ) ):
		print( "--> You probably won't make it in time! :(")
	elif ( (getToBusInterval >= (busArrivalInterval - 60)) and
		(getToBusInterval <= (busArrivalInterval + 60)) ):
		print( "--> It's a close one, you may or may not make it!!! :O")
	else:
		print( "--> You'll make it in time! :)")