From fde8396cb85b4e2108778167d9e923405512ad2d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 12 Jul 2016 21:04:40 +0200 Subject: [PATCH] Do not abort when nonfatal errors occur When a error like "user %s does not exist" occurs when downloading multiple profiles, it now just prints a warning and continues instead of aborting. This fixes #2. --- instagram.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/instagram.py b/instagram.py index 2616a19..7b1b966 100755 --- a/instagram.py +++ b/instagram.py @@ -8,6 +8,12 @@ import requests class DownloaderException(Exception): pass +class ProfileNotExistsException(DownloaderException): + pass + +class ProfileHasNoPicsException(DownloaderException): + pass + def log(*msg, sep='', end='\n', flush=False, quiet=False): if not quiet: print(*msg, sep=sep, end=end, flush=flush) @@ -189,7 +195,7 @@ def download(name, username = None, password = None, sessionfile = None, \ session = load_object(sessionfile) data = get_json(name, session=session) if len(data["entry_data"]) == 0 or "ProfilePage" not in data["entry_data"]: - raise DownloaderException("user %s does not exist" % name) + raise ProfileNotExistsException("user %s does not exist" % name) else: download_profilepic(name, data["entry_data"]["ProfilePage"][0]["user"]["profile_pic_url"], quiet=quiet) @@ -219,7 +225,7 @@ def download(name, username = None, password = None, sessionfile = None, \ if ("nodes" not in data["entry_data"]["ProfilePage"][0]["user"]["media"] \ or len(data["entry_data"]["ProfilePage"][0]["user"]["media"]["nodes"]) == 0) \ and not profile_pic_only: - raise DownloaderException("no pics found") + raise ProfileHasNoPicsException("user %s: no pics found" % name) totalcount = data["entry_data"]["ProfilePage"][0]["user"]["media"]["count"] if not profile_pic_only: count = 1 @@ -269,10 +275,18 @@ def main(): 'if login credentials are needed but not given.') args = parser.parse_args() username = args.login + failedtargets = [] for target in args.targets: - username = download(target, username, args.password, args.sessionfile, - args.profile_pic_only, not args.skip_videos, args.fast_update, - [0,0] if args.no_sleep else [0.25,2], args.quiet) + try: + username = download(target, username, args.password, args.sessionfile, + args.profile_pic_only, not args.skip_videos, args.fast_update, + [0,0] if args.no_sleep else [0.25,2], args.quiet) + except (ProfileNotExistsException, ProfileHasNoPicsException) as err: + failedtargets.append(target) + print("%s\n" % err, file=sys.stderr) + if len(args.targets) > 1 and len(failedtargets) > 0: + print("Errors occured (see above) while downloading profiles: %s\n" % + ", ".join(failedtargets), file=sys.stderr) if __name__ == "__main__": main()