CarOutput_BEA/CarOutput_BEA.py

94 lines
2.9 KiB
Python

from collections import OrderedDict
from time import sleep
from datetime import datetime
import json
import plotly.offline
import plotly.graph_objs as go
import requests
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
bea_server="https://apps.bea.gov/api/data"
if config['DEFAULT']['APIKEY'] is not None:
bea_api_key=config['DEFAULT']['APIKEY']
else:
print("You must supply an api key in a config.ini")
exit()
args={"UserID":bea_api_key,"method":"GETDATASETLIST"}
dataSetListResponse=requests.get(bea_server,params=args)
dataSetListJSON=dataSetListResponse.json()
#print(json.dumps(dataSetListJSON,sort_keys=True,indent=4))
args["method"]="GetParameterList"
args["datasetname"]="NIPA"
parameterListResponse=requests.get(bea_server,params=args)
parameterListJSON=parameterListResponse.json()
#print(json.dumps(parameterListJSON,sort_keys=True,indent=4))
args["method"]="GetParameterValues"
args["ParameterName"]="TableName"
paramaterValuesResponse=requests.get(bea_server,params=args)
paramaterValuesJSON=paramaterValuesResponse.json()
print(json.dumps(paramaterValuesJSON,sort_keys=True,indent=4))
#args["ParameterName"]="Year"
#paramaterValuesResponse=requests.get(bea_server,params=args)
#paramaterValuesJSON=paramaterValuesResponse.json()
#print(json.dumps(paramaterValuesJSON,sort_keys=True,indent=4))
motorVehicleOutput={}
autoOutput={}
truckOutput={}
tableNames=["T70203A","T70203B"]
for table in tableNames:
args["TableName"]=table
args["method"]="GetData"
args["Frequency"]="Q"
args["ShowMillions"]="Y"
args["Year"]="X"
#",".join(map(str,range(2000,2018)))
tableResponse=requests.get(bea_server,params=args)
tableResponseJSON=tableResponse.json()
print(json.dumps(tableResponseJSON,sort_keys=True,indent=4))
for item in tableResponseJSON["BEAAPI"]["Results"]["Data"]:
#print(item)
if item["LineDescription"]=="Motor vehicle output":
motorVehicleOutput[str(item["TimePeriod"]).lower()]=item["DataValue"]
elif item["LineDescription"]=="Auto output":
autoOutput[str(item["TimePeriod"]).lower()]=item["DataValue"]
elif item["LineDescription"]=="Truck output":
truckOutput[str(item["TimePeriod"]).lower()]=item["DataValue"]
sleep(10)
motorVehicleOutputSorted=OrderedDict(sorted(motorVehicleOutput.items()))
autoOutputSorted=OrderedDict(sorted(autoOutput.items()))
truckOutputSorted=OrderedDict(sorted(truckOutput.items()))
print(motorVehicleOutputSorted)
traceMotorVehicle=go.Scatter(
name="Motor Vehicle Output",
x=list(motorVehicleOutputSorted.keys()),
y=list(motorVehicleOutputSorted.values())
)
traceAuto=go.Scatter(
name="Auto Output",
x=list(autoOutputSorted.keys()),
y=list(autoOutputSorted.values())
)
traceTruck=go.Scatter(
name="Truck Output",
x=list(truckOutputSorted.keys()),
y=list(truckOutputSorted.values())
)
data=[traceAuto, traceMotorVehicle,traceTruck]
plotly.offline.plot(data,filename='CarOutPut_'+datetime.now().strftime('%Y%m%d')+'.html')