feat: skip posts older than 24h on first run

- Add MAX_POST_AGE_HOURS config (default 24)
- Filter posts by taken_at timestamp
- Stop fetching when hitting old posts (Instagram returns newest first)
- .env: MAX_POST_AGE_HOURS=24
This commit is contained in:
2026-06-17 12:24:58 +07:00
parent 179605e9b5
commit c786adc079
2 changed files with 14 additions and 1 deletions

View File

@@ -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 = []

View File

@@ -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}")