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_s.jpg' % \
(self.xml['farm'], self.xml['server'], self.xml['primary'], self.xml['secret'])
def filename(self):
return '%s_%s_s.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 id(self):
return self.xml['id']
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.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 getInfo(self):
self.info = flickr.photos_getInfo(photo_id = self.id())
self.tags = []
try:
for t in self.info.photo[0].tags[0].tag:
self.tags += [(t['raw'], t['id'])]
except:
pass
def getTags(self):
if not self.info: self.getInfo()
return self.tags
def removeTag(self, id):
flickr.photos_removeTag(tag_id = id)
self.getInfo()
def addTag(self, tag):
if tag == '': return
flickr.photos_addTags(photo_id = self.id(), tags = '"%s"' % tag)
self.tags.append((tag,None))
def rotate(self, degrees = 90):
res = flickr.photos_transform_rotate(photo_id = self.id(), degrees = degrees)
self.update(res)
def is_public(self):
if not self.info: self.getInfo()
if self.info.photo[0].visibility[0]['ispublic'] == '1': return True
return False
def toggle_public(self):
if not self.info: self.getInfo()
if self.is_public(): set_public = '0'
else: set_public = '1'
res = flickr.photos_setPerms(photo_id = self.id(), is_public = set_public,
is_friend = self.info.photo[0].visibility[0]['isfriend'],
is_family = self.info.photo[0].visibility[0]['isfamily'],
perm_comment = self.info.photo[0].permissions[0]['permcomment'],
perm_addmeta = self.info.photo[0].permissions[0]['permaddmeta'])
self.update(res)
def update(self, res):
self.xml['secret'] = res.photoid[0]['secret']
self.xml['originalsecret'] = res.photoid[0]['originalsecret']
self.getInfo()
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()