coinbus-data/coinbus/Macroeconomic_COVITGDP_v2.py

84 lines
3.1 KiB
Python
Raw Permalink Normal View History

2025-08-29 08:52:11 +00:00
import requests
import pymysql
from datetime import datetime
import time
def get_bea_data(year):
url = ("https://apps.bea.gov/api/data?&UserID=146B5757-D9E3-442C-B6AC-ADE9E6B71114&method=GetData&DataSetName=GDPbyIndustry&Year=%s&Industry=ALL&tableID=15&Frequency=Q&ResultFormat=JSON" % year)
response = requests.get(url)
return response.json()['BEAAPI']['Results'][0]['Data']
def update_database(cursor, data):
industry_map = {
'Agriculture, forestry, fishing, and hunting': 'VAPGDPAFH',
'Mining': 'VAPGDPM',
'Construction': 'VAPGDPC',
'Manufacturing': 'VAPGDPMA',
'Retail trade': 'VAPGDPR',
'Wholesale trade': 'VAPGDPW',
'Utilities': 'VAPGDPU',
'Transportation and warehousing': 'VAPGDPT',
'Information': 'VAPGDPI',
'Finance, insurance, real estate, rental, and leasing': 'VAPGDPFIRL',
'Professional and business services': 'VAPGDPPBS',
'Educational services, health care, and social assistance': 'VAPGDPHCSA',
'Arts, entertainment, recreation, accommodation, and food services': 'VAPGDPAF',
'Other services, except government': 'CPGDPOSEG',
'Government': 'Federation',
'State and local': 'State_local'
}
for entry in data:
year = entry["Year"]
quarter = entry["Quarter"]
new_time = f"{year}Q{quarter}"
industry = entry["IndustrYDescription"]
value = entry["DataValue"]
if industry in industry_map:
column = industry_map[industry]
cursor.execute("SELECT quarterly FROM COVITGDP WHERE quarterly = %s", (new_time,))
result = cursor.fetchone()
if result:
cursor.execute(f"SELECT {column} FROM COVITGDP WHERE quarterly = %s", (new_time,))
old_value = cursor.fetchone()[0]
if old_value != value:
cursor.execute(f"UPDATE COVITGDP SET {column} = %s WHERE quarterly = %s", (value, new_time))
else:
print(f"No update needed for {column} for {new_time}")
else:
if column == 'VAPGDPAFH':
cursor.execute("INSERT INTO COVITGDP (quarterly, VAPGDPAFH) VALUES (%s, %s)", (new_time, value))
else:
cursor.execute(f"INSERT INTO COVITGDP (quarterly, {column}) VALUES (%s, %s) ON DUPLICATE KEY UPDATE {column} = VALUES({column})", (new_time, value))
def main():
years = 2025
while True:
try:
db = pymysql.connect(host="127.0.0.1",user="root",password="2GS@bPYcgiMyL14A",database="Macroeconomics",port=4423)
cursor = db.cursor()
data = get_bea_data(years)
update_database(cursor, data)
db.commit()
except pymysql.MySQLError as e:
print(f"Database connection error: {e}")
break
except Exception as e:
print(f"An error occurred: {e}")
finally:
if 'cursor' in locals():
cursor.close()
if 'db' in locals():
db.close()
time.sleep(86400)
if __name__ == "__main__":
main()