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") download_dir: str = os.getenv("DOWNLOAD_DIR", "/data/downloads")
session_file: str = os.getenv("SESSION_FILE", "/data/session") session_file: str = os.getenv("SESSION_FILE", "/data/session")
max_media_size_mb: int = int(os.getenv("MAX_MEDIA_SIZE_MB", "50")) 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]: def validate(self) -> list[str]:
errors = [] errors = []

View File

@@ -1,7 +1,7 @@
import json import json
import random import random
import time import time
from datetime import datetime from datetime import datetime, timedelta, timezone
from pathlib import Path from pathlib import Path
from typing import AsyncIterator from typing import AsyncIterator
@@ -191,11 +191,23 @@ class InstagramMonitor:
data = resp.json() data = resp.json()
items = data.get("items", []) items = data.get("items", [])
posts = [] posts = []
cutoff = datetime.now(timezone.utc) - timedelta(hours=config.max_post_age_hours)
for item in items: for item in items:
media_id = str(item.get("pk", item.get("id", ""))) media_id = str(item.get("pk", item.get("id", "")))
if media_id in self._state: if media_id in self._state:
break 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) posts.append(item)
return list(reversed(posts)) return list(reversed(posts))
except Exception as e: except Exception as e:
logger.error(f"Error fetching posts for {user_pk}: {e}") logger.error(f"Error fetching posts for {user_pk}: {e}")