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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user