client.py
This commit is contained in:
parent
62743cdb62
commit
3b3e9823ae
@ -1,38 +1,47 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import uuid
|
|
||||||
from pathlib import Path
|
|
||||||
from instagrapi import Client
|
from instagrapi import Client
|
||||||
from dotenv import dotenv_values
|
|
||||||
|
|
||||||
# Load IG accounts from env (expects a JSON list string)
|
|
||||||
INSTAGRAM_ACCOUNTS = json.loads(os.getenv("INSTAGRAM_ACCOUNTS", "[]"))
|
INSTAGRAM_ACCOUNTS = json.loads(os.getenv("INSTAGRAM_ACCOUNTS", "[]"))
|
||||||
|
|
||||||
# Path for storing session files
|
|
||||||
SESSION_DIR = os.path.join(os.getcwd(), "instagram_sessions")
|
SESSION_DIR = os.path.join(os.getcwd(), "instagram_sessions")
|
||||||
os.makedirs(SESSION_DIR, exist_ok=True)
|
os.makedirs(SESSION_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
# Global cache of logged-in clients
|
||||||
|
client_cache: dict[str, Client] = {}
|
||||||
|
|
||||||
|
|
||||||
def get_logged_in_client() -> Client:
|
def get_logged_in_client() -> Client:
|
||||||
|
global client_cache
|
||||||
|
|
||||||
for account in INSTAGRAM_ACCOUNTS:
|
for account in INSTAGRAM_ACCOUNTS:
|
||||||
username = account["username"]
|
username = account["username"]
|
||||||
password = account["password"]
|
password = account["password"]
|
||||||
session_path = os.path.join(SESSION_DIR, f"{username}.json")
|
|
||||||
|
|
||||||
|
# ✅ Return from memory if already logged in
|
||||||
|
if username in client_cache:
|
||||||
|
return client_cache[username]
|
||||||
|
|
||||||
|
session_path = os.path.join(SESSION_DIR, f"{username}.json")
|
||||||
client = Client()
|
client = Client()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if os.path.exists(session_path):
|
if os.path.exists(session_path):
|
||||||
with open(session_path, "r") as f:
|
with open(session_path, "r") as f:
|
||||||
settings = json.load(f)
|
session_data = json.load(f)
|
||||||
client.load_settings(settings)
|
if isinstance(session_data, dict):
|
||||||
client.login(username, password)
|
client.load_settings(session_data)
|
||||||
print(f"✅ Reused session: {username}")
|
else:
|
||||||
else:
|
raise ValueError("Invalid session format")
|
||||||
client.login(username, password)
|
|
||||||
|
client.login(username, password)
|
||||||
|
|
||||||
|
# Save session if freshly logged in
|
||||||
|
if not os.path.exists(session_path):
|
||||||
with open(session_path, "w") as f:
|
with open(session_path, "w") as f:
|
||||||
json.dump(client.get_settings(), f)
|
json.dump(client.get_settings(), f)
|
||||||
print(f"✅ Fresh login: {username}")
|
|
||||||
|
print(f"✅ Logged in and cached: {username}")
|
||||||
|
client_cache[username] = client
|
||||||
return client
|
return client
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -41,4 +50,4 @@ def get_logged_in_client() -> Client:
|
|||||||
os.remove(session_path)
|
os.remove(session_path)
|
||||||
print(f"🧹 Removed invalid session for {username}")
|
print(f"🧹 Removed invalid session for {username}")
|
||||||
|
|
||||||
raise Exception("❌ All Instagram accounts failed login.")
|
raise Exception("❌ All Instagram accounts failed login.")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user