Update app.py
Browse files
app.py
CHANGED
@@ -7,7 +7,6 @@ import time
|
|
7 |
import logging
|
8 |
import random
|
9 |
from functools import wraps
|
10 |
-
from typing import Optional
|
11 |
|
12 |
# Configure logging
|
13 |
logging.basicConfig(
|
@@ -29,7 +28,6 @@ SESSION_FILE = os.path.join(SESSION_DIR, f"session-{INSTAGRAM_USERNAME}") if INS
|
|
29 |
# Create session directory if not exists
|
30 |
os.makedirs(SESSION_DIR, exist_ok=True)
|
31 |
|
32 |
-
# Realistic browser user agents
|
33 |
USER_AGENTS = [
|
34 |
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
35 |
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Safari/605.1.15",
|
@@ -37,13 +35,14 @@ USER_AGENTS = [
|
|
37 |
]
|
38 |
|
39 |
def get_instaloader() -> instaloader.Instaloader:
|
40 |
-
"""Create and configure Instaloader instance with
|
41 |
L = instaloader.Instaloader(
|
42 |
sleep=True,
|
43 |
request_timeout=300,
|
44 |
max_connection_attempts=2,
|
45 |
user_agent=random.choice(USER_AGENTS),
|
46 |
-
|
|
|
47 |
)
|
48 |
|
49 |
if not INSTAGRAM_USERNAME or not INSTAGRAM_PASSWORD:
|
@@ -54,7 +53,6 @@ def get_instaloader() -> instaloader.Instaloader:
|
|
54 |
)
|
55 |
|
56 |
try:
|
57 |
-
# Attempt to load existing session with retry logic
|
58 |
if SESSION_FILE and os.path.exists(SESSION_FILE):
|
59 |
logger.info(f"Attempting to load session from {SESSION_FILE}")
|
60 |
try:
|
@@ -68,11 +66,9 @@ def get_instaloader() -> instaloader.Instaloader:
|
|
68 |
except Exception as e:
|
69 |
logger.warning(f"Session load failed: {str(e)}, performing fresh login")
|
70 |
|
71 |
-
# Fresh login with additional headers
|
72 |
logger.info("Starting fresh login process")
|
73 |
L.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
|
74 |
|
75 |
-
# Add additional headers to mimic browser behavior
|
76 |
L.context._session.headers.update({
|
77 |
'Accept-Language': 'en-US,en;q=0.9',
|
78 |
'Accept-Encoding': 'gzip, deflate, br',
|
@@ -105,6 +101,9 @@ def get_instaloader() -> instaloader.Instaloader:
|
|
105 |
detail="Instagram login service unavailable"
|
106 |
)
|
107 |
|
|
|
|
|
|
|
108 |
def handle_instagram_errors(func):
|
109 |
@wraps(func)
|
110 |
async def wrapper(*args, **kwargs):
|
|
|
7 |
import logging
|
8 |
import random
|
9 |
from functools import wraps
|
|
|
10 |
|
11 |
# Configure logging
|
12 |
logging.basicConfig(
|
|
|
28 |
# Create session directory if not exists
|
29 |
os.makedirs(SESSION_DIR, exist_ok=True)
|
30 |
|
|
|
31 |
USER_AGENTS = [
|
32 |
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
33 |
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Safari/605.1.15",
|
|
|
35 |
]
|
36 |
|
37 |
def get_instaloader() -> instaloader.Instaloader:
|
38 |
+
"""Create and configure Instaloader instance with proper parameters"""
|
39 |
L = instaloader.Instaloader(
|
40 |
sleep=True,
|
41 |
request_timeout=300,
|
42 |
max_connection_attempts=2,
|
43 |
user_agent=random.choice(USER_AGENTS),
|
44 |
+
# CORRECTED PARAMETER NAME:
|
45 |
+
delay_seconds=15 # Changed from sleep_seconds to delay_seconds
|
46 |
)
|
47 |
|
48 |
if not INSTAGRAM_USERNAME or not INSTAGRAM_PASSWORD:
|
|
|
53 |
)
|
54 |
|
55 |
try:
|
|
|
56 |
if SESSION_FILE and os.path.exists(SESSION_FILE):
|
57 |
logger.info(f"Attempting to load session from {SESSION_FILE}")
|
58 |
try:
|
|
|
66 |
except Exception as e:
|
67 |
logger.warning(f"Session load failed: {str(e)}, performing fresh login")
|
68 |
|
|
|
69 |
logger.info("Starting fresh login process")
|
70 |
L.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
|
71 |
|
|
|
72 |
L.context._session.headers.update({
|
73 |
'Accept-Language': 'en-US,en;q=0.9',
|
74 |
'Accept-Encoding': 'gzip, deflate, br',
|
|
|
101 |
detail="Instagram login service unavailable"
|
102 |
)
|
103 |
|
104 |
+
# Rest of the code remains the same as previous version...
|
105 |
+
|
106 |
+
|
107 |
def handle_instagram_errors(func):
|
108 |
@wraps(func)
|
109 |
async def wrapper(*args, **kwargs):
|