update dashboard

This commit is contained in:
MuslemRahimi 2024-11-19 00:07:21 +01:00
parent bdb4b829bc
commit 020480d2bd
2 changed files with 90 additions and 65 deletions

View File

@ -250,20 +250,23 @@ def create_politician_db(data, stock_symbols, stock_raw_data, etf_symbols, etf_r
# Calculate top sectors
sector_list = []
industry_list = []
for item2 in item:
symbol = item2['symbol']
ticker_data = stock_screener_data_dict.get(symbol, {})
for holding in item:
try:
symbol = holding['symbol']
ticker_data = stock_screener_data_dict.get(symbol, {})
# Extract specified columns data for each ticker
sector = ticker_data.get('sector',None)
industry = ticker_data.get('industry',None)
# Extract specified columns data for each ticker
sector = ticker_data.get('sector',None)
industry = ticker_data.get('industry',None)
# Append data to relevant lists if values are present
if sector:
sector_list.append(sector)
if industry:
industry_list.append(industry)
# Append data to relevant lists if values are present
if sector:
sector_list.append(sector)
if industry:
industry_list.append(industry)
except:
pass
# Get the top 3 most common sectors and industries
sector_counts = Counter(sector_list)
@ -375,7 +378,7 @@ async def run():
crypto_con.close()
total_symbols = crypto_symbols +etf_symbols + stock_symbols
chunk_size = 100
chunk_size = 200
politician_list = []
except Exception as e:
@ -384,7 +387,7 @@ async def run():
try:
connector = aiohttp.TCPConnector(limit=100) # Adjust the limit as needed
connector = aiohttp.TCPConnector(limit=200) # Adjust the limit as needed
async with aiohttp.ClientSession(connector=connector) as session:
for i in tqdm(range(0, len(total_symbols), chunk_size)):
try:
@ -392,7 +395,7 @@ async def run():
data = await get_congress_data(symbols_chunk,session)
politician_list +=data
print('sleeping')
await asyncio.sleep(30)
await asyncio.sleep(10)
except Exception as e:
print(e)
pass

View File

@ -109,56 +109,71 @@ if tomorrow.weekday() >= 5: # 5 = Saturday, 6 = Sunday
tomorrow = tomorrow.strftime('%Y-%m-%d')
async def get_upcoming_earnings(session, end_date):
url = "https://api.benzinga.com/api/v2.1/calendar/earnings"
importance_list = ["1","2","3","4","5"]
res_list = []
for importance in importance_list:
querystring = {"token": benzinga_api_key,"parameters[importance]":importance,"parameters[date_from]":today,"parameters[date_to]":end_date,"parameters[date_sort]":"date"}
try:
async with session.get(url, params=querystring, headers=headers) as response:
res = ujson.loads(await response.text())['earnings']
res = [e for e in res if datetime.strptime(e['date'], "%Y-%m-%d").date() != date.today() or datetime.strptime(e['time'], "%H:%M:%S").time() >= datetime.strptime("16:00:00", "%H:%M:%S").time()]
for item in res:
try:
symbol = item['ticker']
name = item['name']
time = item['time']
is_today = True if item['date'] == datetime.today().strftime('%Y-%m-%d') else False
eps_prior = float(item['eps_prior']) if item['eps_prior'] != '' else 0
eps_est = float(item['eps_est']) if item['eps_est'] != '' else 0
revenue_est = float(item['revenue_est']) if item['revenue_est'] != '' else 0
revenue_prior = float(item['revenue_prior']) if item['revenue_prior'] != '' else 0
if symbol in stock_symbols and revenue_est != 0 and revenue_prior != 0 and eps_prior != 0 and eps_est != 0:
df = pd.read_sql_query(query_template, con, params=(symbol,))
market_cap = float(df['marketCap'].iloc[0]) if df['marketCap'].iloc[0] != '' else 0
res_list.append({
'symbol': symbol,
'name': name,
'time': time,
'isToday': is_today,
'marketCap': market_cap,
'epsPrior':eps_prior,
'epsEst': eps_est,
'revenuePrior': revenue_prior,
'revenueEst': revenue_est
})
except Exception as e:
print('Upcoming Earnings:', e)
pass
except Exception as e:
print(e)
pass
try:
res_list = remove_duplicates(res_list)
res_list.sort(key=lambda x: x['marketCap'], reverse=True)
#res_list = [{k: v for k, v in d.items() if k != 'marketCap'} for d in res_list]
return res_list[:10]
except Exception as e:
print(e)
return []
async def get_upcoming_earnings(session, end_date, filter_today=False):
url = "https://api.benzinga.com/api/v2.1/calendar/earnings"
importance_list = ["1", "2", "3", "4", "5"]
res_list = []
today = date.today().strftime('%Y-%m-%d')
for importance in importance_list:
querystring = {
"token": benzinga_api_key,
"parameters[importance]": importance,
"parameters[date_from]": today,
"parameters[date_to]": end_date,
"parameters[date_sort]": "date"
}
try:
async with session.get(url, params=querystring, headers=headers) as response:
res = ujson.loads(await response.text())['earnings']
# Apply the time filter if filter_today is True
if filter_today:
res = [
e for e in res if
datetime.strptime(e['date'], "%Y-%m-%d").date() != date.today() or
datetime.strptime(e['time'], "%H:%M:%S").time() >= datetime.strptime("16:00:00", "%H:%M:%S").time()
]
for item in res:
try:
symbol = item['ticker']
name = item['name']
time = item['time']
is_today = item['date'] == today
eps_prior = float(item['eps_prior']) if item['eps_prior'] != '' else 0
eps_est = float(item['eps_est']) if item['eps_est'] != '' else 0
revenue_est = float(item['revenue_est']) if item['revenue_est'] != '' else 0
revenue_prior = float(item['revenue_prior']) if item['revenue_prior'] != '' else 0
if symbol in stock_symbols and revenue_est and revenue_prior and eps_prior and eps_est:
df = pd.read_sql_query(query_template, con, params=(symbol,))
market_cap = float(df['marketCap'].iloc[0]) if df['marketCap'].iloc[0] != '' else 0
res_list.append({
'symbol': symbol,
'name': name,
'time': time,
'isToday': is_today,
'marketCap': market_cap,
'epsPrior': eps_prior,
'epsEst': eps_est,
'revenuePrior': revenue_prior,
'revenueEst': revenue_est
})
except Exception as e:
print('Upcoming Earnings:', e)
pass
except Exception as e:
print(e)
pass
try:
res_list = remove_duplicates(res_list)
res_list.sort(key=lambda x: x['marketCap'], reverse=True)
return res_list[:10]
except Exception as e:
print(e)
return []
async def get_recent_earnings(session):
@ -263,9 +278,16 @@ async def get_recent_dividends(session):
async def run():
async with aiohttp.ClientSession() as session:
recent_earnings = await get_recent_earnings(session)
upcoming_earnings = await get_upcoming_earnings(session, today)
upcoming_earnings = await get_upcoming_earnings(session, today, filter_today=True)
# If results are less than 5, try without the time filter.
if len(upcoming_earnings) < 5:
upcoming_earnings = await get_upcoming_earnings(session, tomorrow)
upcoming_earnings = await get_upcoming_earnings(session, today, filter_today=False)
# If still less than 5 results, try fetching for tomorrow.
if len(upcoming_earnings) < 5:
upcoming_earnings = await get_upcoming_earnings(session, tomorrow)
recent_dividends = await get_recent_dividends(session)