diff --git a/app/cron_congress_trading.py b/app/cron_congress_trading.py index fa65405..5afe52c 100755 --- a/app/cron_congress_trading.py +++ b/app/cron_congress_trading.py @@ -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 diff --git a/app/cron_dashboard.py b/app/cron_dashboard.py index fca31df..763f0f8 100644 --- a/app/cron_dashboard.py +++ b/app/cron_dashboard.py @@ -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)