update cron job

This commit is contained in:
MuslemRahimi 2024-11-06 23:26:53 +01:00
parent 9ba244dfbc
commit c280d40167
3 changed files with 70 additions and 45 deletions

View File

@ -123,7 +123,7 @@ def add_rank(data):
item['rank'] = index
return data
async def get_gainer_loser_active_stocks():
async def get_gainer_loser_active_stocks(symbols):
#Database read 1y and 3y data
query_fundamental_template = """
@ -160,7 +160,6 @@ async def get_gainer_loser_active_stocks():
gainer_json, loser_json, active_json = await asyncio.gather(*tasks)
gainer_json = [{k: v for k, v in stock.items() if stock['symbol'] in symbols} for stock in gainer_json]
gainer_json = [entry for entry in gainer_json if entry]
@ -222,17 +221,26 @@ async def get_gainer_loser_active_stocks():
entry['marketCap'] = None
entry['volume'] = None
filtered_active_json = sorted(filtered_active_json, key=lambda x: (x['marketCap'] >= 10**9, x['volume']), reverse=True)
stocks = filtered_gainer_json[:20] + filtered_loser_json[:20] + filtered_active_json[:20]
# Get the original lengths
gainer_length = len(filtered_gainer_json)
loser_length = len(filtered_loser_json)
active_length = len(filtered_active_json)
#remove change key element
# Combine all lists
stocks = filtered_gainer_json + filtered_loser_json + filtered_active_json
# Remove change key element
stocks = [{k: v for k, v in stock.items() if k != "change"} for stock in stocks]
day_gainer_json = stocks[:20]
day_loser_json = stocks[20:40]
day_active_json = stocks[40:60]
# Slice based on the original lengths
day_gainer_json = stocks[:gainer_length]
day_loser_json = stocks[gainer_length:gainer_length + loser_length]
day_active_json = stocks[gainer_length + loser_length:]
query_market_movers = """
SELECT
@ -338,8 +346,8 @@ async def get_pre_after_market_movers(symbols):
# Sort the list by changesPercentage in descending order and slice the top 10
gainers = sorted(res_list, key=lambda x: x['changesPercentage'], reverse=True)[:20]
losers = sorted(res_list, key=lambda x: x['changesPercentage'], reverse=False)[:20]
gainers = sorted(res_list, key=lambda x: x['changesPercentage'], reverse=True)[:50]
losers = sorted(res_list, key=lambda x: x['changesPercentage'], reverse=False)[:50]
for index, item in enumerate(gainers, start=1):
item['rank'] = index # Add rank field
@ -380,14 +388,14 @@ try:
con = sqlite3.connect('stocks.db')
cursor = con.cursor()
cursor.execute("PRAGMA journal_mode = wal")
cursor.execute("SELECT DISTINCT symbol FROM stocks WHERE (exchangeShortName = 'NYSE' OR exchangeShortName = 'NASDAQ' or exchangeShortName = 'AMEX')")
cursor.execute("SELECT DISTINCT symbol FROM stocks")
symbols = [row[0] for row in cursor.fetchall()]
#Filter out tickers
symbols = [symbol for symbol in symbols if symbol != "STEC"]
#symbols = [symbol for symbol in symbols if symbol != "STEC"]
data = asyncio.run(get_gainer_loser_active_stocks())
data = asyncio.run(get_gainer_loser_active_stocks(symbols))
with open(f"json/market-movers/data.json", 'w') as file:
ujson.dump(data, file)

View File

@ -175,29 +175,50 @@ def format_upcoming_dividends_data(dividends_data):
return "".join(formatted_items)
import os
from datetime import datetime
import orjson
import praw
from dotenv import load_dotenv
def post_to_reddit():
# Load environment variables
load_dotenv()
# Get current date
# Get current date with formatting
today = datetime.now()
month_str = today.strftime("%b")
day = today.day
year = today.year # Added the year variable
year = today.year
day_suffix = "th" if 11 <= day <= 13 else {1: "st", 2: "nd", 3: "rd"}.get(day % 10, "th")
formatted_date = f"{month_str} {day}{day_suffix} {year}"
# Load and format data
# Load and parse data from JSON file
with open("json/dashboard/data.json", "rb") as file:
data = orjson.loads(file.read())
#formatted_text = format_upcoming_earnings_data(data.get('upcomingEarnings', []))
#title = f"Upcoming Earnings for {formatted_date}"
#formatted_text = format_recent_earnings_data(data.get('recentEarnings', []))
#title = f"Recent Earnings for {formatted_date}"
formatted_text = format_upcoming_dividends_data(data.get('recentDividends', []))
title = f"Upcoming Dividend Announcements for {formatted_date}"
# Define the post configurations
post_configs = [
{
"data_key": "upcomingEarnings",
"format_func": format_upcoming_earnings_data,
"title": f"Upcoming Earnings for {formatted_date}",
"flair_id": "b9f76638-772e-11ef-96c1-0afbf26bd890"
},
{
"data_key": "recentEarnings",
"format_func": format_recent_earnings_data,
"title": f"Recent Earnings for {formatted_date}",
"flair_id": "b9f76638-772e-11ef-96c1-0afbf26bd890"
},
{
"data_key": "recentDividends",
"format_func": format_upcoming_dividends_data,
"title": f"Upcoming Dividend Announcements for {formatted_date}",
"flair_id": "27d56764-9bc8-11ef-9264-322a4c2c1b46"
}
]
try:
# Initialize Reddit instance
reddit = praw.Reddit(
@ -208,31 +229,27 @@ def post_to_reddit():
user_agent=os.getenv('REDDIT_USER_AGENT', 'script:my_bot:v1.0 (by /u/username)')
)
# Define the subreddit and post details
# Define the subreddit
subreddit = reddit.subreddit("stocknear")
#for flair in subreddit.flair.link_templates:
# print(f"Flair ID: {flair['id']}, Flair Text: {flair['text']}")
earnings_flair_id = 'b9f76638-772e-11ef-96c1-0afbf26bd890'
dividends_flair_id = '27d56764-9bc8-11ef-9264-322a4c2c1b46'
# Submit the post with the formatted text
post = subreddit.submit(
title=title,
selftext=formatted_text,
flair_id=dividends_flair_id
)
print(f"Post created successfully with 'Earnings' flair: {post.url}")
# Loop through post configurations to submit each post
for config in post_configs:
formatted_text = config["format_func"](data.get(config["data_key"], []))
title = config["title"]
flair_id = config["flair_id"]
# Submit the post
post = subreddit.submit(
title=title,
selftext=formatted_text,
flair_id=flair_id
)
print(f"Post created successfully: {post.url}")
except praw.exceptions.PRAWException as e:
print(f"Error posting to Reddit: {str(e)}")
return None
except Exception as e:
print(f"Unexpected error: {str(e)}")
return None
if __name__ == "__main__":
post_to_reddit()
post_to_reddit()

View File

@ -86,11 +86,11 @@ class Past_Market_Movers:
performance_data.sort(key=lambda x: x[3], reverse=True)
high_volume = sorted(performance_data, key=lambda x: x[4], reverse=True)
for symbol, name, price, changes_percentage, volume, market_cap in performance_data[:20]:
for symbol, name, price, changes_percentage, volume, market_cap in performance_data[:50]:
gainer_data.append({'symbol': symbol, 'name': name, 'price': price, 'changesPercentage': changes_percentage, 'volume': volume, 'marketCap': market_cap})
for symbol, name, price, changes_percentage, volume, market_cap in performance_data[-20:]:
for symbol, name, price, changes_percentage, volume, market_cap in performance_data[-50:]:
loser_data.append({'symbol': symbol, 'name': name, 'price': price, 'changesPercentage': changes_percentage, 'volume': volume, 'marketCap': market_cap})
for symbol, name, price, changes_percentage, volume, market_cap in high_volume[:20]:
for symbol, name, price, changes_percentage, volume, market_cap in high_volume[:50]:
active_data.append({'symbol': symbol, 'name': name, 'price': price, 'changesPercentage': changes_percentage, 'volume': volume, 'marketCap': market_cap})