Tonight’s Hack
So in preparation for the upcoming Mindcamp, I wanted to glue together the code I have to upload to flickr and Apple’s folder actions to make PhotoBooth automatically upload pictures to Flickr and put them in a PhotoBooth set.
To keep the applescript as small and troublefree as possible, I took an existing applescript folder action (in this case, copy to jpeg) and hacked it up to call a python shell script where I make a few calls using the FlickrAPI module.
-- the list of file types which will be processed -- eg: {"PICT", "JPEG", "TIFF", "GIFf"} property type_list : {"JPEG"} -- since file types are optional in Mac OS X, -- check the name extension if there is no file type -- NOTE: do not use periods (.) with the items in the name extensions list -- eg: {"txt", "text"}, NOT: {".txt", ".text"} property extension_list : {"jpg", "jpeg"} on adding folder items to this_folder after receiving these_items try repeat with i from 1 to number of items in these_items set this_item to item i of these_items set the item_info to the info for this_item if (alias of the item_info is false and the file type of the item_info is in the type_list) or (the name extension of the item_info is in the extension_list) then set theCmd to "/Users/erics/bin/pb_flickr.py " & (quoted form of POSIX path of (this_item as string)) & "&" --display dialog (theCmd as string) do shell script theCmd end if end repeat on error error_message number error_number if the error_number is not -128 then tell application "Finder" activate display dialog error_message buttons {"Cancel"} default button 1 giving up after 120 end tell end if end try end adding folder items to
The python code is pretty straight forward, the only real tricks are getting api keys, secrets, and tokens. I’m not sure I remember what I did to get those, since I did it a year ago.
#!/usr/local/bin/python import os import sys from flickrapi import FlickrAPI set_id='72157594368688426' # your set id here... class flickrprefs: api_key = 'your key here' api_secret = 'your secret herer' auth_token = 'your token here' if __name__=='__main__': argv = sys.argv if len(argv) < 2: sys.exit(0) pth = argv[1] prefs = flickrprefs() try: fapi = FlickrAPI(prefs.api_key, prefs.api_secret) rsp = fapi.auth_checkToken(api_key=prefs.api_key, auth_token=prefs.auth_token) if not rsp: #token isn't valid. sys.exit(0) rsp = fapi.upload(filename = pth, description = '', is_public="1", api_key= prefs.api_key, auth_token = prefs.auth_token, tags='photobooth' ) rsp = fapi.photosets_addPhoto(auth_token=prefs.auth_token, api_key= prefs.api_key, photoset_id=set_id, photo_id=rsp.photoid[0].elementText) except Exception, msg: #print msg pass # I don't really care if I'm not connected to the net.
Finally, it's a simple matter of dropping the applescript in the ~/Library/Scripts/Folder Action Scripts directory and enabling it with the Applescript Folder Actions Setup app.
No comments