Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import json
- import hmac
- import hashlib
- import urllib
- import urllib2
- import md5
- import string
- class InstagramSession:
- login_session = ""
- def __init__(self, key, user_agent="Instagram 7.1.1 Android (21/1.3.1; 480; 1920x1080; samsung; SM-N9005; SM-N9005; smdkc210; en_US)"):
- self.username = ""
- self.password = ""
- self.email = ""
- self.name = ""
- self.key = key
- self.user_agent = user_agent
- def set_ssl_proxy(self, proxy):
- urllib2.install_opener(
- urllib2.build_opener(
- urllib2.ProxyHandler({'https': proxy})
- )
- )
- def _find_string_between(self, s, first, last ):
- try:
- start = s.index( first ) + len( first )
- end = s.index( last, start )
- return s[start:end]
- except ValueError:
- return ""
- def _sign_data(self, data):
- data = json.dumps(data, separators=(',',':'))
- signed_body = hmac.new(self.key, msg=data, digestmod=hashlib.sha256).hexdigest()
- return "signed_body=" + signed_body + "." + urllib.quote(data) + "&ig_sig_key_version=4"
- def _generate_guid(self):
- return "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" % (random.randint(0, 65535), random.randint(0, 65535), random.randint(0, 65535), random.randint(16384, 20479), random.randint(32768, 49151), random.randint(0, 65535), random.randint(0, 65535), random.randint(0, 65535))
- def _get_request(self, request_path):
- headers = {"Connection":"Keep-Alive", "X-IG-Connection-Type":"WIFI", "X-IG-Capabilities":"BQ==", "Accept-Encoding":"gzip", "Accept-Language":"en-US", "User-Agent":self.user_agent}
- request = urllib2.Request("http://i.instagram.com" + request_path)
- response = urllib2.urlopen(request)
- return response
- def _post_request(self, request_path, request_data, cookies):
- headers = {"Host": "i.instagram.com", "Connection":"Keep-Alive", "X-IG-Connection-Type":"WIFI", "X-IG-Capabilities":"BQ==", "Accept-Encoding":"gzip", "Accept-Language":"en-US", "Cookie2":"$Version=1", "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8", "User-Agent":self.user_agent, "Cookie":cookies}
- request = urllib2.Request("https://i.instagram.com" + request_path, data=request_data, headers=headers)
- request.add_header('Content-Length', len(request_data))
- request.add_header('Host', "i.instagram.com")
- response = urllib2.urlopen(request)
- return response
- def chunkstring(self, string, length):
- return (string[0+i:length+i] for i in range(0, len(string), length))
- def login(self, username, password):
- self.guid = self._generate_guid()
- self.username = username
- self.password = password
- response = self._get_request("/api/v1/si/fetch_headers/?challenge_type=signup&guid=" + self.guid)
- cookies = response.info()["Set-Cookie"]
- csrftoken = self._find_string_between(cookies, "csrftoken=", ";")
- mid = self._find_string_between(cookies, "mid=", ";")
- device_id = "android-" + md5.new(str(random.random())).hexdigest()[0:16]
- post_request_data = self._sign_data({"username":self.username, "password":self.password, "device_id": device_id, "guid":self.guid, "_csrftoken":csrftoken})
- print post_request_data
- response = self._post_request("/api/v1/accounts/login/", post_request_data, "csrftoken=" + csrftoken + "; mid=" + mid)
- def signup(self, username, password, email, name):
- self.guid = self._generate_guid()
- self.username = username
- self.password = password
- self.email = email
- self.name = name
- response = self._get_request("/api/v1/si/fetch_headers/?challenge_type=signup&guid=" + self.guid)
- cookies = response.info()["Set-Cookie"]
- csrftoken = self._find_string_between(cookies, "csrftoken=", ";")
- mid = self._find_string_between(cookies, "mid=", ";")
- post_request_data = self._sign_data({"email":self.email, "_csrftoken":csrftoken})
- response = self._post_request("/api/v1/users/check_email/", post_request_data, "csrftoken=" + csrftoken + "; mid=" + mid)
- device_id = "android-" + list(self.chunkstring(str(md5.new(str(random.randint(1000, 9999))).hexdigest()), 16))[1]
- post_request_data = self._sign_data({"email":self.email, "username":self.username, "password":self.password, "device_id":device_id, "guid":self.guid,"first_name":name})
- response = self._post_request("/api/v1/accounts/create/", post_request_data, "csrftoken=" + csrftoken + "; mid=" + mid)
- print device_id
- print response.info()
- print response.read()
- session = InstagramSession("3f0a7d75e094c7385e3dbaa026877f2e067cbd1a4dbcf3867748f6b26f257117", "Instagram 7.1.1 Android (21/5.0.2; 480dpi; 1080x1776; LGE/Google; Nexus 5; hammerhead; hammerhead; en_US)")
- session.signup("jsa230am", "blackman23", "adsadasdsad1asd@gmail.com", "Dong Peterson")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement