update potus tracker

This commit is contained in:
MuslemRahimi 2025-02-24 14:26:52 +01:00
parent 88f1f43a31
commit e956705af4

View File

@ -15,7 +15,7 @@ import os
import sqlite3 import sqlite3
import pandas as pd import pandas as pd
from openai import OpenAI from openai import OpenAI
from datetime import datetime from datetime import datetime, timedelta
import hashlib import hashlib
def generate_unique_id(data): def generate_unique_id(data):
@ -176,7 +176,74 @@ def get_executive_orders():
finally: finally:
driver.quit() driver.quit()
async def get_historical_sector():
sector_list = ["SPY","XLB", "XLC", "XLY", "XLP", "XLE", "XLF", "XLV", "XLI", "XLRE", "XLK", "XLU"]
res_dict = {}
def calculate_percentage_change(current_price, previous_price):
if previous_price == 0:
return 0
return ((current_price - previous_price) / previous_price) * 100
def find_closest_date(data, target_date):
# Find the closest date entry equal to or before the target date
target_date = datetime.strptime(target_date, '%Y-%m-%d')
for entry in reversed(data): # Reverse to search from newest to oldest
entry_date = datetime.strptime(entry['time'], '%Y-%m-%d')
if entry_date <= target_date:
return entry
return None
for symbol in sector_list:
try:
# Load historical data
with open(f"json/historical-price/max/{symbol}.json", "r") as file:
data = orjson.loads(file.read())
# Load current data for 1D change
with open(f"json/quote/{symbol}.json", "r") as file:
current_data = round(orjson.loads(file.read()).get('changesPercentage', 0),2)
if not data:
continue
# Get the latest price (last item in the list)
latest_price = data[-1]['close']
# Calculate dates for different periods
today = datetime.strptime(data[-1]['time'], '%Y-%m-%d')
dates = {
'1W': (today - timedelta(days=7)).strftime('%Y-%m-%d'),
'1M': (today - timedelta(days=30)).strftime('%Y-%m-%d'),
'3M': (today - timedelta(days=90)).strftime('%Y-%m-%d'),
'6M': (today - timedelta(days=180)).strftime('%Y-%m-%d'),
'Inauguration': '2025-01-20'
}
changes = {'1D': current_data}
# Calculate percentage changes for each period
for period, target_date in dates.items():
historical_entry = find_closest_date(data, target_date)
if historical_entry:
change = calculate_percentage_change(latest_price, historical_entry['close'])
changes[period] = round(change, 2)
else:
changes[period] = 0
res_dict[symbol] = changes
except Exception as e:
print(f"Error processing {symbol}: {str(e)}")
continue
return res_dict
async def get_data(): async def get_data():
market_dict = await get_historical_sector()
executive_orders = get_executive_orders() executive_orders = get_executive_orders()
executive_orders_summary = [] executive_orders_summary = []
@ -221,7 +288,6 @@ async def get_data():
sp500_list = df.dropna().to_dict(orient="records") # Drop NaN values and convert to list sp500_list = df.dropna().to_dict(orient="records") # Drop NaN values and convert to list
etf_con.close() etf_con.close()
return_since = round((sp500_list[-1]['close']/sp500_list[0]['close']-1)*100,2)
url = "https://media-cdn.factba.se/rss/json/trump/calendar-full.json" url = "https://media-cdn.factba.se/rss/json/trump/calendar-full.json"
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
@ -239,43 +305,13 @@ async def get_data():
print(f"Failed to fetch data. HTTP status code: {response.status}") print(f"Failed to fetch data. HTTP status code: {response.status}")
if len(data) > 0 and len(executive_orders_summary) > 0: if len(data) > 0 and len(executive_orders_summary) > 0:
# Latest location
details = data[0]['details']
location = data[0]['location']
city = None
longitude = None
latitude = None
for address in [details, location]:
try:
if any(place in address for place in ["Oval Office","White House", "Blair House","Washington DC", "East Room"]):
location = "Washington, DC"
else:
location = address # Otherwise, use the full address string
# Geocode the processed address
location_data = geolocator.geocode(location)
city = location_data.address.split(',', 1)[0]
if location_data:
# Extract city from the address components
address_components = location_data.raw.get('address', {})
# Extract latitude and longitude
latitude = location_data.latitude
longitude = location_data.longitude
print(f"Latitude: {latitude}, Longitude: {longitude}")
break
except:
pass
for item in data: for item in data:
for price_item in sp500_list: for price_item in sp500_list:
if item['date'] == price_item['date']: if item['date'] == price_item['date']:
item['changesPercentage'] = price_item['changesPercentage'] item['changesPercentage'] = price_item['changesPercentage']
break break
res_dict = {'returnSince': return_since,'city': city, 'lon': longitude, 'lat': latitude, 'history': data, 'executiveOrders': executive_orders_summary} res_dict = {'marketPerformance': market_dict, 'history': data, 'executiveOrders': executive_orders_summary}
save_json(res_dict) save_json(res_dict)