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
