From 37b895d84f7c2568cd0212fd2903d4fb28cf2f92 Mon Sep 17 00:00:00 2001 From: smolkik-code Date: Wed, 17 Jun 2026 12:07:27 +0700 Subject: [PATCH] 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 --- instagram_monitor.py | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/instagram_monitor.py b/instagram_monitor.py index 143fa8c..89cfed9 100644 --- a/instagram_monitor.py +++ b/instagram_monitor.py @@ -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: