Skip to content

Commit 13d0fff

Browse files
committed
adds support for downloading all photos for a given user
1 parent 18d2063 commit 13d0fff

1 file changed

Lines changed: 35 additions & 4 deletions

File tree

flickr_download/flick_download.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,25 @@ def download_set(set_id, get_filename, size_label=None):
9292
@param get_filename: Function, function that creates a filename for the photo
9393
@param size_label: str|None, size to download (or None for largest available)
9494
"""
95-
suffix = " ({})".format(size_label) if size_label else ""
9695
pset = Flickr.Photoset(id=set_id)
96+
download_list(pset, pset.title, get_filename, size_label)
97+
98+
99+
def download_list(pset, photos_title, get_filename, size_label):
100+
"""
101+
Download all the photos in the given photo list
102+
103+
@param pset: FlickrList, photo list to download
104+
@param photos_title: str, name of the photo list
105+
@param get_filename: Function, function that creates a filename for the photo
106+
@param size_label: str|None, size to download (or None for largest available)
107+
"""
97108
photos = pset.getPhotos()
98109
pagenum = 2
99110
while True:
100111
try:
112+
if pagenum > photos.info.pages:
113+
break
101114
page = pset.getPhotos(page=pagenum)
102115
photos.extend(page)
103116
pagenum += 1
@@ -106,8 +119,10 @@ def download_set(set_id, get_filename, size_label=None):
106119
break
107120
raise
108121

122+
suffix = " ({})".format(size_label) if size_label else ""
123+
109124
# we need to convert pathname separator to something else to create a valid directory
110-
dirname = pset.title.replace(os.sep, "_")
125+
dirname = photos_title.replace(os.sep, "_")
111126
if not os.path.exists(dirname):
112127
os.mkdir(dirname)
113128

@@ -151,6 +166,18 @@ def download_user(username, get_filename, size_label):
151166
download_set(photoset.id, get_filename, size_label)
152167

153168

169+
def download_user_photos(username, get_filename, size_label):
170+
"""
171+
Download all the photos owned by the given user.
172+
173+
@param username: str, username
174+
@param get_filename: Function, function that creates a filename for the photo
175+
@param size_label: str|None, size to download (or None for largest available)
176+
"""
177+
user = Flickr.Person.findByUserName(username)
178+
download_list(user, username, get_filename, size_label)
179+
180+
154181
def print_sets(username):
155182
"""
156183
Print all sets for the given user
@@ -194,6 +221,8 @@ def main():
194221
help='List photosets for a user')
195222
parser.add_argument('-d', '--download', type=str, metavar='SET_ID',
196223
help='Download the given set')
224+
parser.add_argument('-p', '--download_user_photos', type=str, metavar='USERNAME',
225+
help='Download all photos for a given user')
197226
parser.add_argument('-u', '--download_user', type=str, metavar='USERNAME',
198227
help='Download all sets for a given user')
199228
parser.add_argument('-q', '--quality', type=str, metavar='SIZE_LABEL',
@@ -227,13 +256,15 @@ def main():
227256
print_sets(args.list)
228257
return 0
229258

230-
if args.download or args.download_user:
259+
if args.download or args.download_user or args.download_user_photos:
231260
try:
232261
get_filename = get_filename_handler(args.naming)
233262
if args.download:
234263
download_set(args.download, get_filename, args.quality)
235-
else:
264+
elif args.download_user:
236265
download_user(args.download_user, get_filename, args.quality)
266+
else:
267+
download_user_photos(args.download_user_photos, get_filename, args.quality)
237268
except KeyboardInterrupt:
238269
print('Forcefully aborting. Last photo download might be partial :(', file=sys.stderr)
239270
return 0

0 commit comments

Comments
 (0)