update cron job

This commit is contained in:
MuslemRahimi 2024-11-06 00:09:17 +01:00
parent 0668735a35
commit 1e9c0c8c19
2 changed files with 55 additions and 10 deletions

View File

@ -71,6 +71,9 @@ def aggregate_transactions(transactions, min_value=100_000):
# Calculate average value
avg_value = sum(t['value'] for t in group_list) / len(group_list)
# Calculate the total number of shares in the group
total_shares = sum(t['shares'] for t in group_list)
# Only include transactions with average value >= min_value
if avg_value >= min_value:
# Find latest filing date
@ -79,19 +82,21 @@ def aggregate_transactions(transactions, min_value=100_000):
for t in group_list
).strftime('%Y-%m-%d %H:%M:%S')
# Create aggregated transaction with formatted name
# Create aggregated transaction with formatted name and total shares
result.append({
'reportingName': format_name(key[0]),
'symbol': key[1],
'transactionType': key[2],
'filingDate': latest_date,
'avgValue': avg_value
'avgValue': avg_value,
'totalShares': total_shares # Added total shares here
})
# Sort the final result by filingDate
return sorted(result, key=lambda x: x['filingDate'], reverse=True)
async def get_data(session, symbols):
res_list = []
for page in range(0, 20): # Adjust the number of pages as needed
@ -107,6 +112,7 @@ async def get_data(session, symbols):
"reportingName": item.get("reportingName"),
"symbol": item.get("symbol"),
"filingDate": item.get("filingDate"),
"shares": item.get("securitiesTransacted"),
"value": round(item.get("securitiesTransacted") * item.get("price"),2),
"transactionType": "Buy" if item.get("acquistionOrDisposition") == "A"
else "Sell" if item.get("acquistionOrDisposition") == "D"
@ -124,7 +130,6 @@ async def get_data(session, symbols):
break
res_list = aggregate_transactions(res_list)
new_data = []
for item in res_list:

View File

@ -141,6 +141,40 @@ def format_recent_earnings_data(earnings_data):
return "".join(formatted_items)
def format_upcoming_dividends_data(dividends_data):
"""Format dividends data into Reddit-friendly markdown with nested bullet points."""
formatted_items = []
for item in dividends_data:
symbol = item.get('symbol', None)
if symbol is not None:
name = item.get('name', 'Unknown')
dividend = item.get('dividend', 0)
dividend_prior = item.get('dividendPrior', 1)
dividend_yoy = calculate_yoy_change(dividend, dividend_prior)
dividend_yield = item.get('dividendYield', 0)
ex_dividend_date = item.get('exDividendDate')
payable_date = item.get('payableDate')
record_date = item.get('recordDate')
# Create hyperlink for symbol
symbol_link = f"[{symbol}](https://stocknear.com/stocks/{symbol})"
# Format the entry text with nested bullet points
entry = (
f"**{name}** ({symbol_link}) has announced its upcoming dividend details:\n\n"
f"* **Dividend:** ${dividend:.2f} per share "
f"({dividend_yoy:+.2f}% YoY)\n"
f"* **Dividend Yield:** {dividend_yield:.2f}%\n"
f"* **Ex-Dividend Date:** {datetime.fromisoformat(ex_dividend_date).strftime('%b %d, %Y')}\n"
f"* **Payable Date:** {datetime.fromisoformat(payable_date).strftime('%b %d, %Y')}\n"
f"* **Record Date:** {datetime.fromisoformat(record_date).strftime('%b %d, %Y')}\n\n"
)
formatted_items.append(entry)
return "".join(formatted_items)
def post_to_reddit():
# Load environment variables
load_dotenv()
@ -158,11 +192,12 @@ def post_to_reddit():
data = orjson.loads(file.read())
#formatted_text = format_upcoming_earnings_data(data.get('upcomingEarnings', []))
#title = f"Upcoming Earnings for today, {formatted_date}"
formatted_text = format_recent_earnings_data(data.get('recentEarnings', []))
title = f"Recent Earnings for today, {formatted_date}"
#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}"
try:
# Initialize Reddit instance
reddit = praw.Reddit(
@ -175,18 +210,23 @@ def post_to_reddit():
# Define the subreddit and post details
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=earnings_flair_id
flair_id=dividends_flair_id
)
print(f"Post created successfully with 'Earnings' flair: {post.url}")
except praw.exceptions.PRAWException as e:
print(f"Error posting to Reddit: {str(e)}")
return None