示例#1
0
    def __get_account_following_set(self, id):
        Printer.START("Start of getting following set")

        variables = {}
        variables["id"] = id
        variables['first'] = 50

        first_shot = True
        last_shot = False
        url = "view-source:https://www.instagram.com/graphql/query/?query_hash=58712303d941c6855d4e888c5f0cd22f&variables="

        all_following = []
        page_info = {}

        while True:
            if first_shot:
                first_shot = False
            else:
                variables["after"] = page_info["end_cursor"]
            req_url = url + str(json.dumps(variables))
            self.__driver.get(req_url)
            pre = self.__driver.find_element_by_tag_name("pre").text
            data = json.loads(pre)['data']
            page_info = (data['user']['edge_follow']['page_info'])
            edges = data['user']['edge_follow']['edges']
            for user in edges:
                all_following.append(user['node']['username'])
            if not page_info["has_next_page"]:
                last_shot = True
            if last_shot:
                break
        Printer.OK("Getting all fallowing set is complete")
        all_following = set(all_following)
        return all_following
示例#2
0
 def __save_to_file(data, filename):
     Printer.START("Saving all fallowing in file")
     with open(filename, "w") as f:
         for unit in data:
             f.write("http://www.instagram.com/{}/\n".format(unit))
     f.close()
     Printer.OK("Saving is complete")
示例#3
0
 def auto_follow(self, nickname, count=-1):
     Printer.START(
         "Starting of auto following. Target followers from user - {}\n".
         format(nickname))
     user_data = self.get_user_data(nickname)
     if count < 0:
         count = user_data["edge_owner_to_timeline_media"]
     all_followers = self.__get_account_followers_set(user_data["id"])
     self.__follow(all_followers[:count])
     Printer.OK("Auto following is done\n")
示例#4
0
 def __authorization(self):
     Printer.START("Start of authorization \n")
     self.__driver.get("http://www.instagram.com")
     sleep(2)
     self.__driver.find_element_by_link_text("Вход").click()
     sleep(1)
     self.__driver.find_element_by_name("username").send_keys(self.__login)
     self.__driver.find_element_by_name("password").send_keys(
         self.__password, Keys.ENTER)
     sleep(4)
     self.__isAuth = True
     self.nickname = self.__get_my_nickname()
     self.update_my_data()
     Printer.OK("Authorization is done. Hello, {}!\n".format(self.nickname))
示例#5
0
 def auto_unlike(self, nickname, count):
     Printer.START(
         "Starting of UNLIKEMACHINE. Target - {}\n".format(nickname))
     all_posts = self.get_user_all_posts(nickname)
     bar = progressbar.ProgressBar(max_value=len(all_posts))
     for post, i in enumerate(all_posts[:count]):
         bar.update(i)
         self.__driver.get("http://www.instagram.com/{}/".format(post))
         sleep(1)
         try:
             self.__driver.find_element_by_css_selector(
                 "[aria-label='Не нравится']").click()
         except:
             continue
     Printer.OK("Unlike is done\n")
示例#6
0
 def __unfollow(self, following_list):
     Printer.START("Start of unfollow\n")
     bar = progressbar.ProgressBar(max_value=len(following_list))
     for user, i in enumerate(following_list):
         bar.update(i)
         self.__driver.get("http://www.instagram.com/{}/".format(user))
         self.__driver.find_element_by_css_selector(
             "[aria-label='Подписки']").click()
         self.__driver.find_element_by_xpath(
             "//button[text()='Отменить подписку']").click()
         print("User {} was unfollowed".format(user))
     Printer.OK("Unfollow complete")
     print("_________________________")
     self.update_my_data()
     print("_________________________")
     self.__driver.get("http://www.instagram.com/{}/".format(self.nickname))
示例#7
0
    def __get_account_followers_set(self, id):
        Printer.START("Start of getting followers")

        variables = {}
        variables["id"] = id
        variables['first'] = 50

        first_shot = True
        last_shot = False

        url = "view-source:https://www.instagram.com/graphql/query/?query_hash=37479f2b8209594dde7facb0d904896a&variables="

        unfollowing_followers = []
        following_followers = []
        all_followers = []

        page_info = {}

        while True:
            if first_shot:
                first_shot = False
            else:
                variables["after"] = page_info["end_cursor"]

            req_url = url + str(json.dumps(variables))
            print(req_url)
            self.__driver.get(req_url)
            pre = self.__driver.find_element_by_tag_name("pre").text
            data = json.loads(pre)['data']
            page_info = (data['user']['edge_followed_by']['page_info'])
            edges = data['user']['edge_followed_by']['edges']
            for user in edges:
                all_followers.append(user['node']['username'])
                if user['node']['followed_by_viewer'] == True:
                    following_followers.append(user['node']['username'])
                else:
                    unfollowing_followers.append(user['node']['username'])
            if not page_info["has_next_page"]:
                last_shot = True
            if last_shot:
                break
        Printer.OK("Getting all fallowing set is complete")
        all_followers = set(all_followers)
        return all_followers, following_followers, unfollowing_followers
示例#8
0
    def __get_all_account_posts(self, id):
        Printer.START("Start of getting posts")

        variables = {}
        variables["id"] = id
        variables['first'] = 50

        first_shot = True
        last_shot = False
        query_hash = "f2405b236d85e8296cf30347c9f08c2a"
        url = "view-source:https://www.instagram.com/graphql/query/?query_hash={}&variables=".format(
            query_hash)

        all_posts = []
        liked_posts = []
        not_liked_posts = []
        page_info = {}

        while True:
            if first_shot:
                first_shot = False
            else:
                variables["after"] = page_info["end_cursor"]
            req_url = url + str(json.dumps(variables))
            self.__driver.get(req_url)
            pre = self.__driver.find_element_by_tag_name("pre").text
            data = json.loads(pre)['data']
            page_info = (
                data['user']['edge_owner_to_timeline_media']['page_info'])
            edges = data['user']['edge_owner_to_timeline_media']['edges']
            for post in edges:
                all_posts.append("p/" + post['node']['shortcode'])
                if post['node']['viewer_has_liked']:
                    liked_posts.append("p/" + post['node']['shortcode'])
                else:
                    not_liked_posts.append("p/" + post['node']['shortcode'])
            if not page_info["has_next_page"]:
                last_shot = True
            if last_shot:
                break
        Printer.OK("Getting all posts set is complete")
        all_posts = set(all_posts)
        return all_posts, liked_posts, not_liked_posts