import hashlib
import hmac
import json
import random
import time
import urllib
import uuid
import requests
SIG_KEY_VERSION = "4"
IG_SIG_KEY = "46024e8f31e295869a0e861eaed42cb1dd8454b55232d85f6c6764365079374b"
USER_AGENT = "Instagram 136.0.0.34.124 Android (23/6.0.1; 640dpi; 1440x2560; ZTE; ZTE A2017U; ailsa_ii; qcom; en_US; 208061712)"
REQUEST_HEADERS = {
"X-IG-App-Locale": "en_US",
"X-IG-Device-Locale": "en_US",
"X-IG-Mapped-Locale": "en_US",
"X-Pigeon-Session-Id": "d0a3c6b0-24fd-428c-9d20-624a839f7f08",
"X-Pigeon-Rawclienttime": str(round(time.time() * 1000)),
"X-IG-Connection-Speed": "-1kbps",
"X-IG-Bandwidth-Speed-KBPS": str(random.randint(7000, 10000)),
"X-IG-Bandwidth-TotalBytes-B": str(random.randint(500000, 900000)),
"X-IG-Bandwidth-TotalTime-MS": str(random.randint(50, 150)),
"X-IG-App-Startup-Country": "US",
"X-Bloks-Version-Id": "0a3ae4c88248863609c67e278f34af44673cff300bc76add965a9fb036bd3ca3",
"X-IG-WWW-Claim": "hmac.AR1ETv6FsubYON5DwNj_0CLNmbW7hSNR1yIMeXuhHJORN4n7",
"X-Bloks-Is-Layout-RTL": "false",
"X-Bloks-Enable-RenderCore": "false",
"X-IG-Connection-Type": "WIFI",
"X-IG-Capabilities": "3brTvwM=",
"X-IG-App-ID": "567067343352427",
"Accept-Language": "en-US",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Accept-Encoding": "gzip, deflate",
"Host": "i.instagram.com",
"X-FB-HTTP-Engine": "Liger",
"Connection": "close",
"X-IG-Prefetch-Request": "foreground",
}
def create_session(cookies=None):
session = requests.session()
session.headers.update(REQUEST_HEADERS)
session.headers.update({"User-Agent": USER_AGENT})
if cookies:
session.cookies.update(cookies)
return session
def get_seed(*args):
m = hashlib.md5()
m.update(b"".join([arg.encode("utf-8") for arg in args]))
return m.hexdigest()
def generate_device_id(seed):
volatile_seed = "12345"
m = hashlib.md5()
m.update(seed.encode("utf-8") + volatile_seed.encode("utf-8"))
return "android-" + m.hexdigest()[:16]
def generate_signature(data):
body = (
hmac.new(
IG_SIG_KEY.encode("utf-8"), data.encode("utf-8"), hashlib.sha256
).hexdigest()
+ "."
+ urllib.parse.quote(data)
)
signature = f"signed_body={body}&ig_sig_key_version={SIG_KEY_VERSION}"
return signature
def login(username, password):
phone_id = str(uuid.uuid4())
_uuid = str(uuid.uuid4())
device_id = generate_device_id(get_seed(username, password))
session = create_session()
r = requests.get("https://www.instagram.com/")
csrftoken = r.cookies["csrftoken"]
data = json.dumps(
{
"jazoest": str(random.randint(22000, 22999)),
"country_codes": '[{"country_code":"1","source":["default"]}]',
"phone_id": phone_id,
"_csrftoken": csrftoken,
"username": username,
"adid": "",
"guid": _uuid,
"device_id": device_id,
"google_tokens": "[]",
"password": password,
"login_attempt_count": "1",
}
)
post = generate_signature(data)
response = session.post("https://i.instagram.com/api/v1/accounts/login/", data=post)
json_data = response.json()
if json_data.get("status") == "ok":
return session.cookies
else:
return False
def get_user_id(username, session):
url = f"https://i.instagram.com/api/v1/users/{username}/usernameinfo/"
res = session.get(url)
json_data = res.json()
return json_data["user"]["pk"]
def get_followers(user_id, _uuid, session):
url = f"https://i.instagram.com/api/v1/friendships/{user_id}/followers/"
max_id = " "
usernames = []
while max_id:
if max_id and not max_id.isspace():
payload = {"rank_token": f"{user_id}_{_uuid}", "max_id": max_id}
else:
payload = {"rank_token": f"{user_id}_{_uuid}"}
res = session.get(url, params=payload)
json_data = res.json()
users = json_data["users"]
for user in users:
usernames.append(user["username"])
max_id = json_data.get("next_max_id", False)
return usernames
if __name__ == "__main__":
cookies = login("USER", "PASS")
session = create_session(cookies)
username = "USERNAME"
user_id = get_user_id(username, session)
_uuid = str(uuid.uuid4())
followers = get_followers(user_id, _uuid, session)
with open("followers.txt", "w") as file:
for username in followers:
file.write(username + "\n")
Merhaba. Instagramdan takipçileri almak için api kullanabilirsiniz fakat biraz zahmetli çünkü doğru user agent girmeniz ve instagrama giriş yapmanız gerekli. Burada gerekli yerleri doldurarak kullanabilirsiniz ama giriş yaparken iki faktörlü korumanızın kapalı olması lazım.
Bu arada bu kodları instabot aracından aldım.
(Kod biraz karmaşık duruyor ama yapacak pek bir şey yok açıkcası.)