Last active
August 25, 2019 07:35
-
-
Save nivleshc/8e1a08fa65afe6a67669d1b07c91715d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#this script will query OpenData API to get the current positions for Sydney Trains. It will then use this information to plot the | |
#positions on a map | |
from google.transit import gtfs_realtime_pb2 | |
import requests | |
import datetime | |
import boto3 | |
import os | |
import time | |
from pytz import timezone | |
from decimal import Decimal | |
#list all variables --start | |
baseURL = 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/' # Define URL for opendata API | |
headers = {'Authorization': 'apikey <insert your opendata api key here>'} # Define header for opendata API | |
bucketName = os.environ['BUCKET'] # Set up bucket from environment variable | |
transportPositionTable = os.environ['TRANSPORTPOSITION_TABLE'] #dynamodb table for pushpin labels | |
bucketImagesKey = "images/" # set bucket key for images | |
HtmlLandingpagename = "vehiclelocation.html" #this is the landing html page that will load the image file to show the current position of vehicles | |
#Define operators for opendata API. Possible operators are ['sydneytrains', 'buses', 'ferries', 'lightrail', 'nswtrains', 'regionbuses', 'metro'] | |
operators = ['sydneytrains'] | |
#we will use bing maps to plot the locations | |
maps_bing_prefix = "https://dev.virtualearth.net/REST/v1/Imagery/Map/Road?mapsize=20000,20000&" | |
maps_bing_apikey = "format=jpeg&dcl=1&key=<insert your bing maps api key here>" | |
maps_error_imageURL = "https://image.shutterstock.com/image-photo/image-white-text-message-will-600w-1012395526.jpg" #show this image when there are errors | |
#generating map | |
maps_bing_pushpin_limit = 100 #this is the maximum pushpins that bing maps allows | |
inactive_vehicle_datetime_limit = 10 #(in minutes) this will be used to identify inactive vehicles. If a vehicle's | |
#last stop id timestamp is at least inactive_vehicle_datetime_limit minutes old, | |
# then it is considered to be inactive | |
maps_active_vehicle_icon = '4' #this is the icon that will be used to show active vehicles on the map | |
maps_inactive_vehicle_icon = '10' #this is the icon that will be used to show inactive vehicles on the map | |
legend_vehicle_displayed_on_map_color = "#00bfff" #this color will be used to show legend entries for which the vehicle is displayed on map | |
lastpushpinLabel = 0 #this will be used to generate labels for pushpins. Each pushpin will have a number, which will be associated with a description. | |
#the association will be displayed under a legends section on the right hand side of the web page showing the map. | |
#the vehicle's label will be used as the description | |
#the dicts below allow generating labels for the pushpins that will be mapped. Each pushpin will have a label and a description. | |
dict_pushpinLabel_to_desc_map = {} #this dict will associate a pushpin label to its description. | |
dict_vehicleId_to_pushpinLabel_map = {} #this dict will associate a vehicleId to the pushpin label it has been associated to on the map. | |
pushpin_url = "" #this is the url for the map with the pushpins containing the vehicle positions | |
total_vehicles_found = 0 #this is the total vehicles found, mapped or not | |
dynamodb_item_expiry_in_days = 2 #number of days after which items in dynamodb will be automatically deleted. Using DynamoDB TTL | |
tz_sydney = timezone('Australia/Sydney') # Set up timezone | |
#list all variables --end | |
s3 = boto3.resource('s3') # Define boto3 object to do s3 operations | |
dynamodb = boto3.resource('dynamodb') # Define boto3 object to do dynamodb operations | |
pushpinLabelsTable = dynamodb.Table(transportPositionTable) | |
# Initialize gtfs_realtime_pb2.FeedMessage | |
feed = gtfs_realtime_pb2.FeedMessage() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment