1313import time
1414
1515import flickr_api as Flickr
16+ from flickr_api .flickrerrors import FlickrAPIError
1617from dateutil import parser
1718import 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