How to use the instaloader.LoginRequiredException function in instaloader

To help you get started, we’ve selected a few instaloader examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github instaloader / instaloader / instaloader.py View on Github external
id_filename = '{0}/id'.format(self.dirname_pattern.format(profile=profile.lower(),
                                                                      target=profile.lower()))
        else:
            id_filename = '{0}/{1}_id'.format(self.dirname_pattern.format(), profile.lower())
        try:
            with open(id_filename, 'rb') as id_file:
                profile_id = int(id_file.read())
            if (not profile_exists) or \
                    (profile_id != int(profile_metadata['user']['id'])):
                if profile_exists:
                    self._log("Profile {0} does not match the stored unique ID {1}.".format(profile, profile_id))
                else:
                    self._log("Trying to find profile {0} using its unique ID {1}.".format(profile, profile_id))
                if not self.is_logged_in:
                    self.error("Profile {} changed its name. If you use --login=USERNAME, I can find out the new name.")
                    raise LoginRequiredException("Login required to obtain username from userid")
                newname = self.get_username_by_id(profile_id)
                self._log("Profile {0} has changed its name to {1}.".format(profile, newname))
                if ((format_string_contains_key(self.dirname_pattern, 'profile') or
                     format_string_contains_key(self.dirname_pattern, 'target'))):
                    os.rename(self.dirname_pattern.format(profile=profile.lower(),
                                                          target=profile.lower()),
                              self.dirname_pattern.format(profile=newname.lower(),
                                                          target=newname.lower()))
                else:
                    os.rename('{0}/{1}_id'.format(self.dirname_pattern.format(), profile.lower()),
                              '{0}/{1}_id'.format(self.dirname_pattern.format(), newname.lower()))
                return newname, profile_id
            return profile, profile_id
        except FileNotFoundError:
            pass
        if profile_exists:
github instaloader / instaloader / instaloader.py View on Github external
def interactive_login(self, username: str) -> None:
        """Logs in and internally stores session, asking user for password interactively.

        :raises LoginRequiredException: when in quiet mode."""
        if self.quiet:
            raise LoginRequiredException("Quiet mode requires given password or valid session file.")
        password = None
        while password is None:
            password = getpass.getpass(prompt="Enter Instagram password for %s: " % username)
            try:
                self.login(username, password)
            except BadCredentialsException as err:
                print(err, file=sys.stderr)
                password = None
github instaloader / instaloader / instaloader.py View on Github external
name_updated, profile_id = self.check_profile_id(name, profile_metadata)
        if name_updated != name:
            name = name_updated
            profile_metadata, full_metadata = self.get_profile_metadata(name)

        # Download profile picture
        if profile_pic or profile_pic_only:
            with self._error_catcher('Download profile picture of {}'.format(name)):
                self.download_profilepic(name, profile_metadata)
        if profile_pic_only:
            return

        # Catch some errors
        if profile_metadata["user"]["is_private"]:
            if not self.is_logged_in:
                raise LoginRequiredException("profile %s requires login" % name)
            if not profile_metadata["user"]["followed_by_viewer"] and \
                    self.username != profile_metadata["user"]["username"]:
                raise PrivateProfileNotFollowedException("Profile %s: private but not followed." % name)
        else:
            if self.is_logged_in and not (download_stories or download_stories_only):
                self._log("profile %s could also be downloaded anonymously." % name)

        # Download stories, if requested
        if download_stories or download_stories_only:
            with self._error_catcher("Download stories of {}".format(name)):
                self.download_stories(userids=[profile_id], filename_target=name, fast_update=fast_update)
        if download_stories_only:
            return

        # Iterate over pictures and download them
        self._log("Retrieving posts from profile {}.".format(name))
github instaloader / instaloader / instaloader.py View on Github external
"""
        Download available stories from user followees or all stories of users whose ID are given.
        Does not mark stories as seen.
        To use this, one needs to be logged in

        :param userids: List of user IDs to be processed in terms of downloading their stories
        :param fast_update: If true, abort when first already-downloaded picture is encountered
        :param filename_target: Replacement for {target} in dirname_pattern and filename_pattern
        """

        if format_string_contains_key(self.filename_pattern, 'post'):
            raise InvalidArgumentException("The \"post\" keyword is not supported in the filename pattern when "
                                           "downloading stories.")

        if not self.is_logged_in:
            raise LoginRequiredException('Login required to download stories')

        for user_stories in self.get_stories(userids):
            if "items" not in user_stories:
                raise BadResponseException('Bad reel media JSON.')
            name = user_stories["user"]["username"].lower()
            self._log("Retrieving stories from profile {}.".format(name))
            totalcount = len(user_stories["items"])
            count = 1
            for item in reversed(user_stories["items"]):
                self._log("[%3i/%3i] " % (count, totalcount), end="", flush=True)
                count += 1
                with self._error_catcher('Download story from user {}'.format(name)):
                    downloaded = self.download_story(item, filename_target, name)
                    if fast_update and not downloaded:
                        break
github instaloader / instaloader / instaloader.py View on Github external
def get_username_by_id(self, profile_id: int) -> str:
        """To get the current username of a profile, given its unique ID, this function can be used."""
        data = self.graphql_query(17862015703145017, {'id': str(profile_id), 'first': 1})['data']['user']
        if data:
            data = data["edge_owner_to_timeline_media"]
        else:
            raise ProfileNotExistsException("No profile found, the user may have blocked you (ID: " +
                                            str(profile_id) + ").")
        if not data['edges']:
            if data['count'] == 0:
                raise ProfileHasNoPicsException("Profile with ID {0}: no pics found.".format(str(profile_id)))
            else:
                raise LoginRequiredException("Login required to determine username (ID: " + str(profile_id) + ").")
        else:
            return Post.from_mediaid(self, int(data['edges'][0]["node"]["id"])).owner_username