Reimplemented test_login()

The username does not need to be given anymore at call of
test_login(). Now, the function uses the given session to lookup the
corresponding username.
This commit is contained in:
André Koch-Kramer 2016-07-28 17:44:02 +02:00
parent d0e9b711ac
commit 9d1af7adaf

View File

@ -63,9 +63,9 @@ def get_file_extension(url):
else: else:
return match.group(0)[1:-1] return match.group(0)[1:-1]
def get_followees(login, session): def get_followees(profile, session):
tmpsession = copy_session(session) tmpsession = copy_session(session)
data = get_json(login, tmpsession) data = get_json(profile, tmpsession)
profile_id = data['entry_data']['ProfilePage'][0]['user']['id'] profile_id = data['entry_data']['ProfilePage'][0]['user']['id']
query = ["q=ig_user(" + profile_id + ")+%7B%0A" query = ["q=ig_user(" + profile_id + ")+%7B%0A"
"++follows.", "++follows.",
@ -88,7 +88,7 @@ def get_followees(login, session):
"%7D%0A" "%7D%0A"
"&ref=relationships%3A%3Afollow_list"] "&ref=relationships%3A%3Afollow_list"]
tmpsession.headers.update(default_http_header()) tmpsession.headers.update(default_http_header())
tmpsession.headers.update({'Referer' : 'https://www.instagram.com/'+login+'/following/'}) tmpsession.headers.update({'Referer' : 'https://www.instagram.com/'+profile+'/following/'})
tmpsession.headers.update({'Content-Type' : 'application/json'}) tmpsession.headers.update({'Content-Type' : 'application/json'})
resp = tmpsession.post('https://www.instagram.com/query/', data=query[0]+"first("+query[1]) resp = tmpsession.post('https://www.instagram.com/query/', data=query[0]+"first("+query[1])
if resp.status_code == 200: if resp.status_code == 200:
@ -107,7 +107,7 @@ def get_followees(login, session):
else: else:
break break
return followees return followees
if test_login(login, tmpsession): if test_login(tmpsession):
raise ConnectionException("ConnectionError("+str(resp.status_code)+"): " raise ConnectionException("ConnectionError("+str(resp.status_code)+"): "
"unable to gather followees") "unable to gather followees")
raise LoginRequiredException("Login required to gather followees") raise LoginRequiredException("Login required to gather followees")
@ -219,12 +219,14 @@ def copy_session(session):
new.headers = session.headers new.headers = session.headers
return new return new
def test_login(user, session): def test_login(session):
if user is None or session is None: if session is None:
return False return
resp = session.get('https://www.instagram.com/') data = get_json(str(), session)
if data['config']['viewer'] is None:
return
time.sleep(4 * random.random() + 1) time.sleep(4 * random.random() + 1)
return resp.text.find(user.lower()) != -1 return data['config']['viewer']['username']
def default_http_header(empty_session_only=False): def default_http_header(empty_session_only=False):
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' \ user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' \
@ -270,7 +272,7 @@ def get_session(user, passwd):
session.headers.update({'X-CSRFToken':login.cookies['csrftoken']}) session.headers.update({'X-CSRFToken':login.cookies['csrftoken']})
time.sleep(5 * random.random()) time.sleep(5 * random.random())
if login.status_code == 200: if login.status_code == 200:
if test_login(user, session): if user == test_login(session):
return session return session
else: else:
raise BadCredentialsException('Login error! Check your credentials!') raise BadCredentialsException('Login error! Check your credentials!')
@ -350,7 +352,7 @@ def download_profiles(targets, username=None, password=None, sessionfile=None,
# Login, if desired # Login, if desired
if username is not None: if username is not None:
session = load_session(username, sessionfile, quiet=quiet) session = load_session(username, sessionfile, quiet=quiet)
if not test_login(username, session): if username != test_login(session):
session = get_logged_in_session(username, password, quiet) session = get_logged_in_session(username, password, quiet)
log("Logged in as %s." % username, quiet=quiet) log("Logged in as %s." % username, quiet=quiet)
else: else: