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:
@@ -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 = []
|
||||
|
||||
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user