update realtime rate limit for X
This commit is contained in:
+7
-18
@@ -10,7 +10,7 @@ import time
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import tweepy
|
||||
from openai import OpenAI
|
||||
from foodie_utils import post_tweet, AUTHORS, SUMMARY_MODEL, load_json_file
|
||||
from foodie_utils import post_tweet, AUTHORS, SUMMARY_MODEL, load_json_file, check_author_rate_limit
|
||||
from foodie_config import X_API_CREDENTIALS, RECENT_POSTS_FILE
|
||||
from dotenv import load_dotenv
|
||||
|
||||
@@ -310,9 +310,6 @@ def post_weekly_thread():
|
||||
if username in posts_by_author:
|
||||
posts_by_author[username].append(post)
|
||||
|
||||
# Load post counts to check limits
|
||||
post_counts = load_post_counts()
|
||||
|
||||
# Post threads for each author
|
||||
for author in AUTHORS:
|
||||
username = author["username"]
|
||||
@@ -321,21 +318,13 @@ def post_weekly_thread():
|
||||
logging.info(f"No posts found for {username}, skipping")
|
||||
continue
|
||||
|
||||
# Check daily limit (each thread will use 3 tweets: lead + 2 thread tweets)
|
||||
author_count = next((entry for entry in post_counts if entry["username"] == username), None)
|
||||
if not author_count:
|
||||
logging.error(f"No post count entry for {username}, skipping")
|
||||
# Check if the author can post before generating the thread
|
||||
can_post, remaining, reset = check_author_rate_limit(author)
|
||||
if not can_post:
|
||||
reset_time = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(reset)) if reset else "Unknown"
|
||||
logging.info(f"Skipping weekly thread for {username} due to rate limit. Remaining: {remaining}, Reset at: {reset_time}")
|
||||
continue
|
||||
if author_count["daily_count"] >= 15:
|
||||
logging.warning(f"Daily post limit (15) reached for {username}, skipping")
|
||||
continue
|
||||
if author_count["daily_count"] + 3 > 15:
|
||||
logging.warning(f"Posting thread for {username} would exceed daily limit (current: {author_count['daily_count']}, needed: 3), skipping")
|
||||
continue
|
||||
if author_count["monthly_count"] >= 500:
|
||||
logging.warning(f"Monthly post limit (500) reached for {username}, skipping")
|
||||
continue
|
||||
|
||||
|
||||
# Select top 2 posts (to fit within 3-tweet limit: lead + 2 posts)
|
||||
author_posts = sorted(author_posts, key=lambda x: datetime.fromisoformat(x["timestamp"]), reverse=True)[:2]
|
||||
logging.info(f"Selected {len(author_posts)} posts for {username}")
|
||||
|
||||
Reference in New Issue
Block a user