Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import json
- import requests
- import re
- class UserInfo:
- '''
- This class try to take some user info (following, followers, etc.)
- '''
- user_agent = ("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
- "(KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36")
- url_user_info = "https://www.instagram.com/%s/"
- url_list = {
- "ink361": {
- "main": "http://ink361.com/",
- "user": "http://ink361.com/app/users/%s",
- "search_name": "https://data.ink361.com/v1/users/search?q=%s",
- "search_id": "https://data.ink361.com/v1/users/ig-%s",
- "followers": "https://data.ink361.com/v1/users/ig-%s/followed-by",
- "following": "https://data.ink361.com/v1/users/ig-%s/follows",
- "stat": "http://ink361.com/app/users/ig-%s/%s/stats"
- }
- }
- def __init__(self, info_aggregator="ink361"):
- self.i_a = info_aggregator
- self.hello()
- def hello(self):
- self.s = requests.Session()
- self.s.headers.update({'User-Agent': self.user_agent})
- return True
- def get_user_id_by_login(self, user_name):
- url_info = self.url_user_info % (user_name)
- info = self.s.get(url_info)
- json_info = json.loads(re.search('{"activity.+show_app', info.text, re.DOTALL).group(0)+'":""}')
- id_user = json_info['entry_data']['ProfilePage'][0]['graphql']['user']['id']
- return id_user
- def search_user(self, user_id=None, user_name=None):
- '''
- Search user_id or user_name, if you don't have it.
- '''
- self.user_id = user_id or False
- self.user_name = user_name or False
- if not self.user_id and not self.user_name:
- # you have nothing
- return False
- elif self.user_id:
- # you have just id
- search_url = self.url_list[self.i_a]["search_id"] % self.user_id
- elif self.user_name:
- # you have just name
- search_url = self.url_list[self.i_a][
- "search_name"] % self.user_name
- else:
- # you have id and name
- return True
- search = self.s.get(search_url)
- if search.status_code == 200:
- r = json.loads(search.text)
- if self.user_id:
- # you have just id
- self.user_name = r["data"]["username"]
- else:
- for u in r["data"]:
- if u["username"] == self.user_name:
- t = u["id"].split("-")
- self.user_id = t[1]
- # you have just name
- return True
- return False
- def get_followers(self, limit=-1):
- self.followers = None
- self.followers = []
- if self.user_id:
- next_url = self.url_list[self.i_a]["followers"] % self.user_id
- while True:
- followers = self.s.get(next_url)
- r = json.loads(followers.text)
- for u in r["data"]:
- if limit > 0 or limit < 0:
- self.followers.append({
- "username": u["username"],
- #"profile_picture": u["profile_picture"],
- "id": u["id"].split("-")[1],
- #"full_name": u["full_name"]
- })
- limit -= 1
- else:
- return True
- if r["pagination"]["next_url"]:
- # have more data
- next_url = r["pagination"]["next_url"]
- else:
- # end of data
- return True
- return False
- def get_following(self, limit=-1):
- self.following = None
- self.following = []
- if self.user_id:
- next_url = self.url_list[self.i_a]["following"] % self.user_id
- while True:
- following = self.s.get(next_url)
- r = json.loads(following.text)
- for u in r["data"]:
- if limit > 0 or limit < 0:
- self.following.append({
- "username": u["username"],
- #"profile_picture": u["profile_picture"],
- "id": u["id"].split("-")[1],
- #"full_name": u["full_name"]
- })
- limit -= 1
- else:
- return True
- if r["pagination"]["next_url"]:
- # have more data
- next_url = r["pagination"]["next_url"]
- else:
- # end of data
- return True
- return False
- def get_stat(self, limit):
- # todo
- return False
- '''
- # example
- ui = UserInfo()
- # search by user_name:
- ui.search_user(user_name="danbilzerian")
- # or if you know user_id ui.search_user(user_id="50417061")
- print(ui.user_name)
- print(ui.user_id)
- # get following list with no limit
- ui.get_following()
- print(ui.following)
- # get followers list with limit 10
- ui.get_followers(limit=10)
- print(ui.followers)
- '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement