fix: login via followees endpoint instead of /users/self/info/

- Login check uses /friendships/{ds_user_id}/following/ (works reliably)
- Store own_user_id from cookies to avoid extra API call
- Skip separate user info fetch
This commit is contained in:
2026-06-17 12:07:27 +07:00
parent cb2461ace4
commit 37b895d84f

View File

@@ -34,6 +34,7 @@ class InstagramMonitor:
self._download_dir.mkdir(parents=True, exist_ok=True)
self._state: dict[str, str] = self._load_state()
self._logged_in = False
self._own_user_id: int = 0
def _load_state(self) -> dict[str, str]:
if self._state_file.exists():
@@ -52,7 +53,6 @@ class InstagramMonitor:
if self._logged_in:
return True
# Try cookies.txt
cookies_path = None
for candidate in [
Path(config.download_dir) / "cookies.txt",
@@ -85,16 +85,20 @@ class InstagramMonitor:
return False
logger.info(f"Cookies loaded: ds_user_id={ds_user_id}")
self._own_user_id = int(ds_user_id)
resp = self.session.get(f"{API_BASE}/users/self/info/", headers=IG_HEADERS, timeout=30)
# Test by fetching own followees (lightweight check)
resp = self.session.get(
f"{API_BASE}/friendships/{ds_user_id}/following/",
params={"count": 1},
timeout=30,
)
if resp.status_code == 200:
data = resp.json()
username = data.get("user", {}).get("username") or data.get("username", "unknown")
logger.info(f"Logged in as: {username}")
logger.info("Login verified via followees endpoint")
self._logged_in = True
return True
else:
logger.error(f"Session validation failed: {resp.status_code} {resp.text[:200]}")
logger.error(f"Login check failed: {resp.status_code} {resp.text[:200]}")
return False
except Exception as e:
@@ -104,24 +108,7 @@ class InstagramMonitor:
def _get_followees(self) -> list[dict]:
followees = []
max_id = None
# First get own user ID
try:
resp = self.session.get(f"{API_BASE}/users/self/info/", timeout=30)
if resp.status_code == 200:
own_user_id = resp.json().get("user", {}).get("pk") or resp.json().get("pk")
if own_user_id:
logger.info(f"Own user ID: {own_user_id}")
else:
logger.error("Could not get own user ID from response")
logger.debug(f"Response keys: {list(resp.json().keys())}")
return followees
else:
logger.error(f"Failed to get own user ID: {resp.status_code}")
return followees
except Exception as e:
logger.error(f"Error getting own user ID: {e}")
return followees
own_user_id = self._own_user_id
while True:
try: