#!/usr/bin/env python
# FlickrSetDownloadr.py
# Downloads photos from a Flickr set
# Usage: python FlickrSetDownloadr.py [PHOTOSET_ID]
 
import sys
from collections import deque
try:
    from xml.etree.cElementTree import fromstring
except:
    from xml.etree.ELementTree import fromstring
from urllib import urlencode, urlretrieve
from urllib2 import urlopen
 
API = 'http://api.flickr.com/services/rest/'
API_KEY = 'f354be9d986de18bb2125c81b438b660'
PHOTOSET_ID = sys.argv[1]
 
pages = int(fromstring(urlopen(API, urlencode({'method' : 'flickr.photosets.getPhotos',
                                               'api_key' : API_KEY,
                                               'photoset_id' : PHOTOSET_ID})).read()).find('photoset').attrib['pages'])
 
for i in xrange(1,pages + 1):
    set = fromstring(urlopen(API, urlencode({'method' : 'flickr.photosets.getPhotos',
                                             'api_key' : API_KEY,
                                             'photoset_id' : PHOTOSET_ID,
                                             'page' : i})).read()).find('photoset')
    for photo in set.iter('photo'):
        url = (deque(fromstring(urlopen(API, urlencode({'method' : 'flickr.photos.getSizes',
                                                             'api_key' : API_KEY,
                                                             'photo_id' : photo.attrib['id']})).read())
                                                             .find('sizes').iter('size'), maxlen=1)
                                                             .pop().attrib['source'])
        urlretrieve(url, url.split('/')[-1])