update cron job
This commit is contained in:
parent
0668735a35
commit
1e9c0c8c19
@ -71,6 +71,9 @@ def aggregate_transactions(transactions, min_value=100_000):
|
|||||||
# Calculate average value
|
# Calculate average value
|
||||||
avg_value = sum(t['value'] for t in group_list) / len(group_list)
|
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
|
# Only include transactions with average value >= min_value
|
||||||
if avg_value >= min_value:
|
if avg_value >= min_value:
|
||||||
# Find latest filing date
|
# Find latest filing date
|
||||||
@ -79,19 +82,21 @@ def aggregate_transactions(transactions, min_value=100_000):
|
|||||||
for t in group_list
|
for t in group_list
|
||||||
).strftime('%Y-%m-%d %H:%M:%S')
|
).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
# Create aggregated transaction with formatted name
|
# Create aggregated transaction with formatted name and total shares
|
||||||
result.append({
|
result.append({
|
||||||
'reportingName': format_name(key[0]),
|
'reportingName': format_name(key[0]),
|
||||||
'symbol': key[1],
|
'symbol': key[1],
|
||||||
'transactionType': key[2],
|
'transactionType': key[2],
|
||||||
'filingDate': latest_date,
|
'filingDate': latest_date,
|
||||||
'avgValue': avg_value
|
'avgValue': avg_value,
|
||||||
|
'totalShares': total_shares # Added total shares here
|
||||||
})
|
})
|
||||||
|
|
||||||
# Sort the final result by filingDate
|
# Sort the final result by filingDate
|
||||||
return sorted(result, key=lambda x: x['filingDate'], reverse=True)
|
return sorted(result, key=lambda x: x['filingDate'], reverse=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def get_data(session, symbols):
|
async def get_data(session, symbols):
|
||||||
res_list = []
|
res_list = []
|
||||||
for page in range(0, 20): # Adjust the number of pages as needed
|
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"),
|
"reportingName": item.get("reportingName"),
|
||||||
"symbol": item.get("symbol"),
|
"symbol": item.get("symbol"),
|
||||||
"filingDate": item.get("filingDate"),
|
"filingDate": item.get("filingDate"),
|
||||||
|
"shares": item.get("securitiesTransacted"),
|
||||||
"value": round(item.get("securitiesTransacted") * item.get("price"),2),
|
"value": round(item.get("securitiesTransacted") * item.get("price"),2),
|
||||||
"transactionType": "Buy" if item.get("acquistionOrDisposition") == "A"
|
"transactionType": "Buy" if item.get("acquistionOrDisposition") == "A"
|
||||||
else "Sell" if item.get("acquistionOrDisposition") == "D"
|
else "Sell" if item.get("acquistionOrDisposition") == "D"
|
||||||
@ -124,7 +130,6 @@ async def get_data(session, symbols):
|
|||||||
break
|
break
|
||||||
|
|
||||||
res_list = aggregate_transactions(res_list)
|
res_list = aggregate_transactions(res_list)
|
||||||
|
|
||||||
|
|
||||||
new_data = []
|
new_data = []
|
||||||
for item in res_list:
|
for item in res_list:
|
||||||
|
|||||||
@ -141,6 +141,40 @@ def format_recent_earnings_data(earnings_data):
|
|||||||
|
|
||||||
return "".join(formatted_items)
|
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():
|
def post_to_reddit():
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
@ -158,11 +192,12 @@ def post_to_reddit():
|
|||||||
data = orjson.loads(file.read())
|
data = orjson.loads(file.read())
|
||||||
|
|
||||||
#formatted_text = format_upcoming_earnings_data(data.get('upcomingEarnings', []))
|
#formatted_text = format_upcoming_earnings_data(data.get('upcomingEarnings', []))
|
||||||
#title = f"Upcoming 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 today, {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:
|
try:
|
||||||
# Initialize Reddit instance
|
# Initialize Reddit instance
|
||||||
reddit = praw.Reddit(
|
reddit = praw.Reddit(
|
||||||
@ -175,18 +210,23 @@ def post_to_reddit():
|
|||||||
|
|
||||||
# Define the subreddit and post details
|
# Define the subreddit and post details
|
||||||
subreddit = reddit.subreddit("stocknear")
|
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'
|
earnings_flair_id = 'b9f76638-772e-11ef-96c1-0afbf26bd890'
|
||||||
|
dividends_flair_id = '27d56764-9bc8-11ef-9264-322a4c2c1b46'
|
||||||
|
|
||||||
# Submit the post with the formatted text
|
# Submit the post with the formatted text
|
||||||
|
|
||||||
post = subreddit.submit(
|
post = subreddit.submit(
|
||||||
title=title,
|
title=title,
|
||||||
selftext=formatted_text,
|
selftext=formatted_text,
|
||||||
flair_id=earnings_flair_id
|
flair_id=dividends_flair_id
|
||||||
)
|
)
|
||||||
print(f"Post created successfully with 'Earnings' flair: {post.url}")
|
print(f"Post created successfully with 'Earnings' flair: {post.url}")
|
||||||
|
|
||||||
|
|
||||||
except praw.exceptions.PRAWException as e:
|
except praw.exceptions.PRAWException as e:
|
||||||
print(f"Error posting to Reddit: {str(e)}")
|
print(f"Error posting to Reddit: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user