import json from hashlib import sha1 from os.path import expanduser import flickrapi def setup_flickr(api_key, api_secret): flickr = flickrapi.FlickrAPI(api_key, api_secret) token, frob = flickr.get_token_part_one(perms='write') if not token: raw_input("Press ENTER after you authorized this program") flickr.get_token_part_two((token, frob)) return flickr def get_photo_signature(flickr, photo_id): info = flickr.photos_getInfo(photo_id=photo_id).find('photo') exif = flickr.photos_getExif(photo_id=photo_id).find('photo') if not info or not exif: raise InvalidPhotoIdError(photo_id) return [ info.get('originalformat'), info.find('owner').get('location'), info.find('dates').get('taken') ] + sorted( (e.get('label'), e.get('tag'), e.get('tagspace'), e.get('tagspaceid'), e.find('raw').text) for e in exif.findall('exif') ) def get_photo_sha1sum(flickr, photo_id): return sha1(str(get_photo_signature(flickr, photo_id))) def get_flickr_from_rc_file(rc_file=expanduser('~/.flickrscripts.json')): rc_conf = json.load(open(rc_file)) return setup_flickr(rc_conf['APIKEY'], rc_conf['APISECRET']) class InvalidPhotoIdError(ValueError): pass