diff --git a/config.py b/config.py index e428f6e..042ac9c 100644 --- a/config.py +++ b/config.py @@ -12,6 +12,7 @@ class Config: download_dir: str = os.getenv("DOWNLOAD_DIR", "/data/downloads") session_file: str = os.getenv("SESSION_FILE", "/data/session") max_media_size_mb: int = int(os.getenv("MAX_MEDIA_SIZE_MB", "50")) + max_post_age_hours: int = int(os.getenv("MAX_POST_AGE_HOURS", "24")) def validate(self) -> list[str]: errors = [] diff --git a/instagram_monitor.py b/instagram_monitor.py index 2db7899..ffccc6b 100644 --- a/instagram_monitor.py +++ b/instagram_monitor.py @@ -1,7 +1,7 @@ import json import random import time -from datetime import datetime +from datetime import datetime, timedelta, timezone from pathlib import Path from typing import AsyncIterator @@ -191,11 +191,23 @@ class InstagramMonitor: data = resp.json() items = data.get("items", []) posts = [] + cutoff = datetime.now(timezone.utc) - timedelta(hours=config.max_post_age_hours) + for item in items: media_id = str(item.get("pk", item.get("id", ""))) if media_id in self._state: break + + # Filter by date + taken_at = item.get("taken_at", 0) + if taken_at: + post_time = datetime.fromtimestamp(taken_at, tz=timezone.utc) + if post_time < cutoff: + logger.debug(f"Skipping old post {media_id} from {post_time.isoformat()}") + break + posts.append(item) + return list(reversed(posts)) except Exception as e: logger.error(f"Error fetching posts for {user_pk}: {e}")