import flickrapi
import os, urllib2
api_key = 'b323b13ee741f5c97bc8b94d2ad388fa'
api_secret = '363b542a1a14fffa'
flickr = flickrapi.FlickrAPI(api_key, api_secret)
def authenticate(message):
(token, frob) = flickr.get_token_part_one(perms = 'write')
if not token: message('Please authorize this program in the browser, and then continue')
flickr.get_token_part_two((token,frob))
# Get photosets (list their IDs, names, and URLs)
def photosets(user = None):
sets = flickr.photosets_getList(user = user)
return [Set(s) for s in sets.photosets[0].photoset]
# Get photos from the first set
def photos(id):
pics = flickr.photosets_getPhotos(photoset_id = id)
return [Photo(p) for p in pics.photoset[0].photo]
# Get all tags
def tags():
rawtags = flickr.tags_getListUserRaw()
tags = {}
for t in rawtags.who[0].tags[0].tag:
tags[t['clean']] = t.raw[0].text
return tags
def get_photo(working_path, url, filename, force):
path = os.path.join(working_path, filename)
if not os.path.exists(path) or force:
i = urllib2.urlopen(url)
o = file(path, 'wb')
o.write(i.read())
o.close()
return path
class Set:
def __init__(self, xml):
self.xml = xml
def url(self):
return 'http://farm%s.static.flickr.com/%s/%s_%s_t.jpg' % \
(self.xml['farm'], self.xml['server'], self.xml['primary'], self.xml['secret'])
def filename(self):
return '%s_%s_t.jpg' % (self.xml['primary'], self.xml['secret'])
def id(self):
return self.xml['id']
def name(self):
return self.xml.title[0].text
def get_photo(self, working_path):
return get_photo(working_path, self.url(), self.filename(), False)
class Photo:
def __init__(self, xml):
self.xml = xml
self.info = None
def url(self, size = 't'):
return 'http://farm%s.static.flickr.com/%s/%s' % \
(self.xml['farm'], self.xml['server'], self.filename(size))
def filename(self, size = ''):
if size != '': size = '_' + size
return '%s_%s%s.jpg' % (self.xml['id'], self.xml['secret'], size)
def get(self, working_path, size, force = False):
return get_photo(working_path, self.url(size), self.filename(size), force)
def get_info(self):
self.info = flickr.photos_getInfo(photo_id = self.xml['id'])
def tags(self):
if not self.info: self.get_info()
if not self.info.photo[0].tags[0].xml: return []
return [t['raw'] for t in self.info.photo[0].tags[0].tag]
def rotate(self):
res = flickr.photos_transform_rotate(photo_id = self.xml['id'], degrees = 90)
self.xml['secret'] = res.photoid[0]['secret']
self.xml['originalsecret'] = res.photoid[0]['originalsecret']
if __name__ == "__main__":
authenticate(raw_input)
sets = photosets()
for s in sets: print "%s: %s" % (s.name(), s.url())
pics = photos(sets[0])
for p in pics:
print p.url()