def main(): parser = argparse.ArgumentParser( formatter_class=argparse.RawTextHelpFormatter, description='Downloads one or more Flickr photo sets.\n' '\n' 'To use it you need to get your own Flickr API key here:\n' 'https://www.flickr.com/services/api/misc.api_keys.html\n' '\n' 'For more information see:\n' 'https://github.com/beaufour/flickr-download\n' '\n' 'You can store argument defaults in ' + CONFIG_FILE + '. API keys for example:\n' ' api_key: .....\n' ' api_secret: ...\n', epilog='examples:\n' ' list all sets for a user:\n' ' > {app} -k <api_key> -s <api_secret> -l beaufour\n' '\n' ' download a given set:\n' ' > {app} -k <api_key> -s <api_secret> -d 72157622764287329\n' '\n' ' download a given set, keeping duplicate names:\n' ' > {app} -k <api_key> -s <api_secret> -d 72157622764287329 -n title_increment\n' .format(app=sys.argv[0]) ) parser.add_argument('-k', '--api_key', type=str, help='Flickr API key') parser.add_argument('-s', '--api_secret', type=str, help='Flickr API secret') parser.add_argument('-t', '--user_auth', action='store_true', help='Enable user authentication') parser.add_argument('-l', '--list', type=str, metavar='USER', help='List photosets for a user') parser.add_argument('-d', '--download', type=str, metavar='SET_ID', help='Download the given set') parser.add_argument('-p', '--download_user_photos', type=str, metavar='USERNAME', help='Download all photos for a given user') parser.add_argument('-u', '--download_user', type=str, metavar='USERNAME', help='Download all sets for a given user') parser.add_argument('-i', '--download_photo', type=str, metavar='PHOTO_ID', help='Download one specific photo') parser.add_argument('-q', '--quality', type=str, metavar='SIZE_LABEL', default=None, help='Quality of the picture') parser.add_argument('-n', '--naming', type=str, metavar='NAMING_MODE', help='Photo naming mode') parser.add_argument('-m', '--list_naming', action='store_true', help='List naming modes') parser.add_argument('-o', '--skip_download', action='store_true', help='Skip the actual download of the photo') parser.add_argument('-j', '--save_json', action='store_true', help='Save photo info like description and tags, one .json file per photo') parser.set_defaults(**_load_defaults()) args = parser.parse_args() if args.list_naming: print(get_filename_handler_help()) return 1 if not args.api_key or not args.api_secret: print ('You need to pass in both "api_key" and "api_secret" arguments', file=sys.stderr) return 1 ret = _init(args.api_key, args.api_secret, args.user_auth) if not ret: return 1 # Replace stdout with a non-strict writer that replaces unknown characters instead of throwing # an exception. This "fixes" print issues on the standard Windows terminal, and when there is no # terminal at all. if sys.stdout.isatty(): default_encoding = sys.stdout.encoding else: default_encoding = locale.getpreferredencoding() if default_encoding != 'utf-8': sys.stdout = codecs.getwriter(default_encoding)(sys.stdout, 'replace') if args.list: print_sets(args.list) return 0 if args.skip_download: print('Will skip actual downloading of files') if args.save_json: print('Will save photo info in .json file with same basename as photo') if args.download or args.download_user or args.download_user_photos or args.download_photo: try: with Timer('total run'): get_filename = get_filename_handler(args.naming) if args.download: download_set(args.download, get_filename, args.quality, args.skip_download, args.save_json) elif args.download_user: download_user(args.download_user, get_filename, args.quality, args.skip_download, args.save_json) elif args.download_photo: download_photo(args.download_photo, get_filename, args.quality, args.skip_download, args.save_json) else: download_user_photos(args.download_user_photos, get_filename, args.quality, args.skip_download, args.save_json) except KeyboardInterrupt: print('Forcefully aborting. Last photo download might be partial :(', file=sys.stderr) return 0 print('ERROR: Must pass either --list or --download\n', file=sys.stderr) parser.print_help() return 1
def main(): parser = argparse.ArgumentParser( formatter_class=argparse.RawTextHelpFormatter, description='Downloads one or more Flickr photo sets.\n' '\n' 'To use it you need to get your own Flickr API key here:\n' 'https://www.flickr.com/services/api/misc.api_keys.html\n' '\n' 'For more information see:\n' 'https://github.com/beaufour/flickr-download', epilog='examples:\n' ' list all sets for a user:\n' ' > {app} -k <api_key> -s <api_secret> -l beaufour\n' '\n' ' download a given set:\n' ' > {app} -k <api_key> -s <api_secret> -d 72157622764287329\n' '\n' ' download a given set, keeping duplicate names:\n' ' > {app} -k <api_key> -s <api_secret> -d 72157622764287329 -n title_increment\n' .format(app=sys.argv[0]) ) parser.add_argument('-k', '--api_key', type=str, help='Flickr API key') parser.add_argument('-s', '--api_secret', type=str, help='Flickr API secret') parser.add_argument('-t', '--user_auth', action='store_true', help='Enable user authentication') parser.add_argument('-l', '--list', type=str, metavar='USER', help='List photosets for a user') parser.add_argument('-d', '--download', type=str, metavar='SET_ID', help='Download the given set') parser.add_argument('-u', '--download_user', type=str, metavar='USERNAME', help='Download all sets for a given user') parser.add_argument('-q', '--quality', type=str, metavar='SIZE_LABEL', default=None, help='Quality of the picture') parser.add_argument('-n', '--naming', type=str, metavar='NAMING_MODE', help='Photo naming mode') parser.add_argument('-m', '--list_naming', action='store_true', help='List naming modes') parser.set_defaults(**_load_defaults()) args = parser.parse_args() if args.list_naming: print(get_filename_handler_help()) return 1 if not args.api_key or not args.api_secret: print ('You need to pass in both "api_key" and "api_secret" arguments', file=sys.stderr) return 1 ret = _init(args.api_key, args.api_secret, args.user_auth) if not ret: return 1 if args.list: print_sets(args.list) return 0 if args.download or args.download_user: try: get_filename = get_filename_handler(args.naming) if args.download: download_set(args.download, get_filename, args.quality) else: download_user(args.download_user, get_filename, args.quality) except KeyboardInterrupt: print('Forcefully aborting. Last photo download might be partial :(', file=sys.stderr) return 0 print('ERROR: Must pass either --list or --download\n', file=sys.stderr) parser.print_help() return 1