Skip to content

Commit a751b70

Browse files
committed
Merge pull request #5 from balkian/master
Support for downloading multiple pages, store sets in subdirectories and support for downloading specific sizes
2 parents c1eb442 + a91f834 commit a751b70

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

flickr_download/flick_download.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import time
1414

1515
import flickr_api as Flickr
16+
from flickr_api.flickrerrors import FlickrAPIError
1617
from dateutil import parser
1718
import yaml
1819

@@ -83,10 +84,24 @@ def download_set(set_id, size_label=None):
8384
@param set_id: str, id of the photo set
8485
@param size_label: str|None, size to download (or None for largest available)
8586
"""
87+
suffix = " ({})".format(size_label) if size_label else ""
8688
pset = Flickr.Photoset(id=set_id)
8789
photos = pset.getPhotos()
90+
pagenum = 2
91+
while True:
92+
try:
93+
page = pset.getPhotos(page=pagenum)
94+
photos.extend(page)
95+
pagenum += 1
96+
except FlickrAPIError as ex:
97+
if ex.code == 1:
98+
break
99+
else:
100+
raise ex
101+
if not os.path.exists(pset.title):
102+
os.mkdir(pset.title)
88103
for photo in photos:
89-
fname = '{0}.jpg'.format(photo.id)
104+
fname = '{0}/{1}{2}.jpg'.format(pset.title, photo.title, suffix)
90105
if os.path.exists(fname):
91106
# TODO: Ideally we should check for file size / md5 here
92107
# to handle failed downloads.
@@ -127,6 +142,8 @@ def main():
127142
help='List photosets for a user')
128143
parser.add_argument('-d', '--download', type=str, metavar='SET_ID',
129144
help='Download the given set')
145+
parser.add_argument('-q', '--quality', type=str, metavar='SIZE_LABEL',
146+
default=None, help='Quality of the picture')
130147
parser.set_defaults(**_load_defaults())
131148

132149
args = parser.parse_args()
@@ -142,7 +159,7 @@ def main():
142159
if args.list:
143160
print_sets(args.list)
144161
elif args.download:
145-
download_set(args.download)
162+
download_set(args.download, args.quality)
146163
else:
147164
print >> sys.stderr, 'ERROR: Must pass either --list or --download\n'
148165
parser.print_help()

0 commit comments

Comments
 (0)