Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
set flickr_folder to ((path to home folder as text) & "scripts:flickr") set the_xml_folder to flickr_folder & ":photoinfo" set the_download_folder to flickr_folder & ":download" set already_downloaded to list folder the_download_folder set the_xml_files to get_xml_files(the_xml_folder) set all_the_photos to get_all_photos() set start_index to 1 -- use the following to restart the script from a photo other than -- the first, if the script stopped downloading or whatever. --set start_index to get_index_of_photo(all_the_photos, "foo.jpg") --if start_index is -1 then -- log "failed to find photo" -- return 1 --end if set photo_count to count of all_the_photos repeat with i from start_index to photo_count log i set the_photo to (item i of all_the_photos) set the_filename to get_photo_filename(the_photo) set the_id to (item 1 of (string_to_list(the_filename, "_"))) set the_data to load_xml(the_xml_folder & ":" & the_id & ".xml") set the_xml to parse_it(the_data) -- generate the full URL to the original photo file set the_photo_tag to getAnElement(the_xml, "photo") set the_title to getElementValue(getElementFromPath(the_xml, {"photo", "title"})) set the_description to getElementValue(getElementFromPath(the_xml, {"photo", "description"})) -- get a list of the tags associated with this photo set the_xml_tags to getElements(getElementFromPath(the_xml, {"photo", "tags"}), "tag") set the_tags to {} repeat with j from 1 to count of the_xml_tags set the_tag to (item j of the_xml_tags) set end of the_tags to getElementValue(the_tag) end repeat tell application "iPhoto" tell the_photo set title to the_title set comment to the_description end tell select the_photo set keywords_count to the count of the the_tags repeat with i from 1 to keywords_count set the_keyword to (item i of the the_tags) «event KAnewkey» given name:the_keyword assign keyword string the_keyword end repeat end tell end repeat return 0 on get_index_of_photo(the_photos, the_photo_filename) set the_count to count of the_photos repeat with i from 1 to the_count set the_photo to (item i of the_photos) tell application "iPhoto" tell the_photo set the_filename to image filename if the_filename is the_photo_filename then return i end if end tell end tell end repeat return -1 end get_index_of_photo on get_all_photos() tell application "iPhoto" set all_the_photos to the photos of photo library album return all_the_photos end tell end get_all_photos on get_photo_filename(the_photo) tell application "iPhoto" tell the_photo return the image filename end tell end tell end get_photo_filename on getElementValue(theXML) if theXML is missing value or theXML is {} then return "" else if class of theXML is string then return theXML else try return item 1 of XML contents of theXML on error number -1728 return "" end try end if end getElementValue on getElementFromPath(theXML, theElementPath) if theElementPath is {} then return theXML else local foundElement set foundElement to getAnElement(theXML, item 1 of theElementPath) if foundElement is not missing value and ¬ class of foundElement is XML element then return getElementFromPath(foundElement, rest of theElementPath) else return missing value end if end if end getElementFromPath on getAnElement(theXML, theElementName) -- find and return a particular element (this presumes there is only one instance of the element) repeat with anElement in XML contents of theXML if class of anElement is XML element and ¬ XML tag of anElement is theElementName then return contents of anElement end if end repeat return missing value end getAnElement on getNamedElement(theXML, theElementName, theName) -- find and return the first element with a particular name attribute if class of theXML is XML element or class of theXML is XML document then repeat with anElement in XML contents of theXML try if class of anElement is XML element and ¬ XML tag of anElement is theElementName and ¬ |name| of XML attributes of anElement is theName then return contents of anElement end if on error number -1728 -- ignore this error end try end repeat else if class of theXML is list then repeat with anElement in theXML try if class of anElement is XML element and ¬ XML tag of anElement is theElementName and ¬ |name| of XML attributes of anElement is theName then return contents of anElement end if on error number -1728 -- ignore this error end try end repeat end if return missing value end getNamedElement on getElements(theXML, theElementName) local theResult set theResult to {} repeat with anElement in XML contents of theXML if class of anElement is XML element and XML tag of anElement is theElementName then set end of theResult to contents of anElement end if end repeat return theResult as list end getElements on get_xml_files(the_xml_folder) return list folder the_xml_folder end get_xml_files on load_xml(the_file) set fRef to open for access file the_file without write permission set the_contents to (read fRef) close access fRef return the_contents end load_xml on parse_it(the_xml_data) set the_xml to parse XML the_xml_data return the_xml end parse_it on string_to_list(the_string, the_delim) my atid(the_delim) set the_list to (every text item of the_string) as list my atid("") return the_list end string_to_list on atid(the_delim) set AppleScript's text item delimiters to the_delim end atid
This paste will be private.
From the Design Piracy series on my blog: