Search code examples
macosuploadapplescriptphotosautomator

Upload random file hourly with photos.app and applescript


I have baby photos in a folder and I want to upload them one at a time about every hour (4000 secs not 3600 secs) to a shared iCloud album that all my relatives see on their iPhones and iPads and macs. Here is my applescript saved as an application with the keep open box checked. I think it's not quite right. What's wrong?

on idle

set importFolder to "Amac:Users:AbuDavid:Downloads:uploadBABY"
set extensionsList to {"jpg", "png", "tiff"}

tell application "Finder" to set theFiles to some file of importFolder whose name extension is in extensionsList

if (count of theFiles) < 1 then
    display dialog "No images selected!" buttons "OK"
else
    set albumName to "BabyDouDou"
    set timeNow to time string of (current date)
    set today to date string of (current date)
    set albumName to albumName & " " & timeNow & " " & today
    set imageList to theFiles

    tell application "Photos"
        activate
        delay 2
        import imageList into albumName skip check duplicates yes
    end tell

    tell application "Finder" to move theFiles to trash
end if
return 4000


end idle

Solution

  • There are some issues:

    • The Finder needs the keyword folder – not just a literal string – to specify a folder.
    • some file returns always one file so the count command fails and returns always 0.
    • albumName is a literal string as well rather than a object specifier.
    • Photos.app expects alias specifiers for the files to be imported rather than Finder object specifiers.

    Try this

    on idle
      set importFolder to (path to downloads folder as text) & "uploadBABY"
      set extensionsList to {"jpg", "png", "tiff"}
    
      tell application "Finder" to set theFiles to files of folder importFolder whose name extension is in extensionsList
    
      if (count theFiles) < 1 then
          display dialog "No images selected!" buttons "OK"
      else
          set theFile to some item of theFiles
          set albumName to "BabyDouDou"
          set timeNow to time string of (current date)
          set today to date string of (current date)
          set albumName to albumName & " " & timeNow & " " & today
          set imageList to {theFile as alias}
    
          tell application "Photos"
              activate
              delay 2
              if not (exists container albumName) then
                  set theAlbum to make new album
                  set name of theAlbum to albumName
              else
                  set theAlbum to container albumName
              end if
              import imageList into theAlbum skip check duplicates yes
          end tell
    
          tell application "Finder" to move theFiles to trash
      end if
      return 4000
    end idle