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