[GastForen Programmierung/Entwicklung AppleScript Bilder aus iPhoto per Script in Folder kopieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

26. Feb 2014, 10:55
Beitrag # 1 von 17
Bewertung:
(7861 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hoi zusammen,

wir betreiben in unserer Kinderkrippe als "Goodie" für unsere Eltern einen eigenen Fotoserver (Synology).
Die Bilder werden manuell aus iPhoto auf den Server kopiert und jeweils einzelnen Kindern zugeordnet.
Da dies mittlerweile einen ziemlichen Umfang angenommen hat, würde ich gerne die Aufgabe per Apple Script etwas beschleunigen:

- Ein oder mehrere Bild(er) in iPhoto auswählen (mache ich)
- im Finder auf den Ordner mit dem Namen des Kindes ziehen (mache auch noch ich)
- Script prüft Datum des Bildes
- Script prüft, ob Ordner mit dem entsprechenden Jahr existiert, falls nicht wird dieser angelegt
- Script prüft im Jahresordner, ob der entsprechende Monat existiert, falls nicht wird dieser angelegt
- Script kopiert Bild in den passenden Ordner
- nächstes Bild
u.s.w

Lässt sich dies überhaupt mit Apple Script realisieren? Falls der Aufwand ein größerer ist, könnte dies auch durchaus im Rahmen einer Auftragsprogrammierung erfolgen.

Danke für Eure Unterstützung

Peter
X

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

26. Feb 2014, 11:48
Beitrag # 2 von 17
Beitrag ID: #524149
Bewertung:
(7844 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

herzlich willkommen im AppleScript-Forum auf HDS! :-)

Ob sich Deine Aufgabe per AppleScript realisieren lässt, kann ich nicht sagen, denn für "iPhoto" habe ich noch nie ein Script geschrieben und verwende das Programm auch nicht.

Die meisten der Punkte müssten vom "Finder" ausgeführt werden. Zuerst sollte man also prüfen, ob es möglich ist, dem "Finder" die gewählten Dateien zuzuweisen.

Mit "Datum des Bildes" ist sehr wahrscheinlich das Datum der Aufnahme gemeint (und nicht das Datum der Datei). Da müsste man an die Meta-Daten herankommen.

Welche Version von Mac OS X benutzest Du?

Gruss, Hans


als Antwort auf: [#524147]

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

26. Feb 2014, 11:57
Beitrag # 3 von 17
Beitrag ID: #524150
Bewertung:
(7838 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke für die rasche Antwort.
Ich nutze OS X 10.9.1

Datum des Bildes ist das Aufnahmedatum, korrekt.
Heute markiere ich ein oder mehrere Bilder in iPhoto und ziehe diese dann direkt in den Finder, so würde ich es auch in Zukunft gerne tun. Denn die Zuordnung, welches Kind nun auf einem Foto dargestellt ist, kann nur ich übernehmen.


LG
Peter


als Antwort auf: [#524149]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

26. Feb 2014, 12:18
Beitrag # 4 von 17
Beitrag ID: #524153
Bewertung:
(7820 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

nun ... "Mavericks" habe ich mir noch nicht angetan.

Doch "iPhoto" ist auf einer alten "Tiger"-Partition installiert und ich werde damit erste Versuche machen.

Es sei denn, ein versierter Mitleser könnte rasch eine Lösung aus dem Ärmel hervorzaubern ...

Gruss, Hans


als Antwort auf: [#524150]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

27. Feb 2014, 08:06
Beitrag # 5 von 17
Beitrag ID: #524187
Bewertung:
(7760 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

ich habe nun auf dem neuen Mac Pro unter "Mountain Lion" die "iPhoto" entdeckt und ein AppleScript-Droplet entwickelt.

Zum Gebrauch:
– Die zu kopierenden Fotos in "iPhoto" auswählen
– die Auswahl auf das Icon des Droplets ziehen
– der Dialog zur Wahl des Zielordners öffnet sich
– den Zielordner wählen und "Auswählen" klicken

Das Script stellt von jedem Bild das Datum fest und erzeugt die entsprechenden Ordner, wenn sie nicht vorhanden sind und kopiert die Bilddateien.

Den Namen der Monate wird eine zweistellige Zahl vorangestellt, damit die Reihenfolge stimmt. Falls diese Ordnungszahlen nicht gewünscht sind, können sie in der Liste 'monthNames' entfernt werden.

Den folgenden Code im Dateiformat "Programm" speichern.

Code
(*  
FotosKopieren_01d.app
Bild-Dateien in einen Zielordner kopieren
© 27.02.14 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

global allNames
global monthNames
global targetFolder

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Die Fotos auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- den Zielordner auswählen
set targetFolder to (choose folder with prompt "Bitte den Zielordner wählen:") as Unicode text
-- die Namen aller Fotos auflisten
tell application "iPhoto"
set allNames to get name of every photo
end tell
-- die Monatsnamen
set monthNames to {"01_Januar", "02_Februar", "03_Maerz", "04_April", "05_Mai", "06_Juni", ¬
"07_Juli", "08_August", "09_September", "10_Oktober", "11_November", "12_Dezember"}
-- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processFile' schickt
repeat with aObject in allObjects
processFile(aObject as Unicode text)
end repeat
-- den Anwender über das Ergbenis der Aktion informieren
display dialog "Fertig." buttons "OK" default button 1 with icon 2 giving up after 1
end open

-- die Datei in den Zielordner kopieren
on processFile(aFile)
-- der Name der Datei ohne Suffix
tell application "Finder" to set docName to text 1 thru -5 of (get name of alias aFile)
-- das Datum speichern
set curDate to ""
tell application "iPhoto"
-- eine Schleife durch die Namen
repeat with n from 1 to count allNames
-- bei einer Übereinstimmung ...
if item n of allNames is "P6190309" then
-- … das Datum holen ...
set curDate to date of photo n
-- … und die Schleife verlassen
exit repeat
end if
end repeat
end tell

-- wenn das Datum nicht leer ist
if curDate is not "" then
-- das Jahr zuweisen
set curYear to year of curDate
-- den Index des Monats feststellen und das entsprechende Element der Liste
set m to (get month of curDate) as integer
set curMonth to item m of monthNames

-- der Jahresordner
set yearFolder to (targetFolder & curYear) as string
-- testen, ob der Jahresordner vorhanden ist...
tell application "Finder"
-- wenn nicht vorhanden, den Ordner erzeugen ...
if not (yearFolder exists) then
try
make new folder at targetFolder with properties {name:curYear}
end try
end if
end tell

-- der Monatsordner
set monthFolder to (yearFolder & ":" & curMonth) as string
-- testen, ob der Monatsordner vorhanden ist...
tell application "Finder"
-- wenn nicht vorhanden, den Ordner erzeugen ...
if not (monthFolder exists) then
try
make new folder at yearFolder with properties {name:curMonth}
end try
end if
end tell

-- die aktuelle Datei kopieren
try
tell application "Finder" to duplicate aFile to monthFolder with replacing
end try
end if
end processFile

Weil der Zielordner nicht immer derselbe ist, muss er bei jeder Ausführung gewählt werden. Falls dies zu umständlich wirkt, könnte man das Script in eine Ordneraktion verwandeln, welche dann jedem Zielordner angehängt werden kann. Aber das wäre weniger zuverlässig als das Droplet.

Gruss, Hans


als Antwort auf: [#524153]

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

27. Feb 2014, 14:16
Beitrag # 6 von 17
Beitrag ID: #524199
Bewertung:
(7729 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Servus Hans,

zu aller erst - wow! Ganz herzlichen Dank. Das ist jetzt wirklich spitze. Die App ist von der Funktionsweise exakt das was ich benötige. Die Startadresse für das Kopieren der Bilder ist immer die selbe, daher wäre es sinnvoll, diese gleich "fest zu verdrahten": afp://DiskStation1512._afpovertcp._tcp.local/photo/Die Wolkennest Kinder

Von dort aus wird dann der entsprechende Kinderordner ausgewählt.

Allerdings funktioniert die App bei mir nicht. Wenn ich Bilder auf die App ziehe, kann ich im Finder einen Folder auswählen, dann kommt nach einiger Zeit die Meldung "Fertig" und dann aber sofort die Meldung "Die Änderungen an diesem Skript konnten nicht gesichert werden, da ein Programmfehler aufgetreten ist. -2706"

Bilder wurden dann auch nicht in den ausgewählten Ordner kopiert und auch keine Unterordner angelegt.

Also würde die App funktionieren, wäre sie für meine Zwecke perfekt.

Und natürlich werde ich Mitglied, Spende ist unterwegs.

LG
Peter


als Antwort auf: [#524187]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

27. Feb 2014, 14:59
Beitrag # 7 von 17
Beitrag ID: #524200
Bewertung:
(7719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

bitte sehr. Allerdings wäre es erst spitze, wenn es funktionieren würde.

"Hauptschuldiger" scheint mir der "Mavericks" zu sein, denn unter "Mountain Lion" funktioniert das Anlegen der Ordner und das Kopieren der Dateien wie erwartet.

Ich bin gerade unterwegs und kann leider nicht vor heute Abend etwas zum Analysieren des Problems zusammenstellen. Jetzt kann ich nur ein paar Fragen stellen.

Hast du das neueste Update von "Mavericks" gemacht?
Werden wenigstens die Jahres- und Monatsordner angelegt?
Was geschieht, wenn Du als Ziel einen Ordner auf der Festplatte des Macs wählst?

Ich habe heute Morgen das Script in eine Ordneraktion umgewandelt. Falls Du es herunterladen möchtest: Es ist derselbe Link, aber anstelle von "01d" die vier Buchstaben "scpt" einsetzen. Das Installieren wird schwieriger sein, weil das Script in einem speziellen Ordner untergebracht werden, bevor man es an den Zielordner hängen kann.

Ich werde, falls notwendig, heute Abend eine Anleitung verfassen.

Und ja: herzlichen Dank für die Spende. Vorbildlich! Das Forum ist darauf angewiesen.

Gruss, Hans


als Antwort auf: [#524199]

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

27. Feb 2014, 15:14
Beitrag # 8 von 17
Beitrag ID: #524201
Bewertung:
(7712 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Servus Hans,

- yep - Mavericks in jüngster Ausprägung: 10.9.2

- nein, es werden überhaupt keine Ordner angelegt

- hab's auch mit einem Ordner auf dem Mac versucht, mit exakt dem selben Ergebnis

LG
Peter


als Antwort auf: [#524200]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

27. Feb 2014, 16:11
Beitrag # 9 von 17
Beitrag ID: #524203
Bewertung:
(7688 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

ja dann wird die Ordneraktion auch nicht funktionieren. Es sei denn, dass es sich "nur" um ein Rechteproblem beim Zugriff auf den Zielordner handelt.

Und ich werde Dir vorläufig auch nicht helfen können. Samstag fahre ich in den Skiurlaub und "Mavericks" werde ich erst nach meiner Rückkehr installieren.

Ich hoffe, dass sich ein versierter AppleScripter meldet, welcher das Droplet zum Laufen bringen kann.

Gruss, Hans


als Antwort auf: [#524201]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

28. Feb 2014, 20:22
Beitrag # 10 von 17
Beitrag ID: #524285
Bewertung:
(7640 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

gute Nachricht: Entgegen meiner Aussage, habe ich "Mavericks" doch noch vor meinem Urlaub installiert.

Okay, das Droplet funktioniert nicht. :-(

Aber – entgegen meiner Befürchtung – klappt es mit der Ordneraktion. Und mit dieser ist es viel praktischer, weil die Fotos direkt auf den Zielordner gezogen werden. Keine Fummelei im Dialog, um den Ordner auszuwählen.

Ich habe Dir per PM den Link zum Herunterladen des Scripts zugestellt.

Allerdings ist das Installieren nicht so einfach. Nicht zuletzt, weil der Ordner "Library" per Vorgabe unsichtbar ist. Aber diese ärgerliche Vorsichtsmassnahme kann man aushebeln. Ich habe eine Anleitung getippt und Dir ebenfalls per PM zugestellt.

Gruss, Hans


als Antwort auf: [#524203]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Mär 2014, 12:28
Beitrag # 11 von 17
Beitrag ID: #524437
Bewertung:
(7543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo AppleScript-Fans,

Zwischenbericht: Einer Rückmeldung von Peter entnehme ich, dass er das Ordneraktions-Script zwar erfolgreich an einen Zielordner angehängt hat, aber die Ordner (Jahr, Monat) werden nicht erzeugt.

Die Meldung "Fertig", welche zuletzt gezeigt wird, ist der einzige Hinweis darauf, dass das Script ausgeführt wird.

Ich werde nach meinem Urlaub ein Script herstellen, um die Sache zu analysieren und die Ursache des Nichtfunktionierens zu finden.

Gruss, Hans


als Antwort auf: [#524285]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

9. Mär 2014, 22:12
Beitrag # 12 von 17
Beitrag ID: #524662
Bewertung:
(7442 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

als Version 01 hatte ich ein Test-Script erwischt, welches nur mit meinen Bildernamen funktionieren kann.

Das habe ich nun in der Version 02 korrigiert und auch eine kleine Änderung gemacht, welche die Ausführung – hoffentlich – beschleunigt, wenn in "iPhoto" viele Bilder geladen sind.

Nachstehend der Code zum Ordneraktions-Script:

Code
(*  
FotosKopieren_02d.scpt
Bild-Dateien in einen Zielordner kopieren
© 09.03.14 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

global allNames
global monthNames
global targetFolder

-- der Handler 'adding folder items to', welcher auf das Fallenlassen von Objekten reagiert
on adding folder items to thisFolder after receiving theseObjects
-- den Zielordner auswählen
set targetFolder to thisFolder as Unicode text
-- die Namen aller Fotos auflisten
tell application "iPhoto"
set allNames to get name of every photo
end tell
-- die Monatsnamen
set monthNames to {"01_Januar", "02_Februar", "03_Maerz", "04_April", "05_Mai", "06_Juni", ¬
"07_Juli", "08_August", "09_September", "10_Oktober", "11_November", "12_Dezember"}
-- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processFile' schickt
repeat with aObject in theseObjects
processFile(aObject as Unicode text)
end repeat
-- den Anwender über das Ergbenis der Aktion informieren
display dialog "Fertig." buttons "OK" default button 1 with icon 2 giving up after 1
end adding folder items to

-- die Datei in den Zielordner kopieren
on processFile(aFile)
-- der Name der Datei ohne Suffix
tell application "Finder" to set docName to text 1 thru -5 of (get name of alias aFile)
-- das Datum speichern
set curDate to ""
tell application "iPhoto"
-- eine Schleife durch die Namen
repeat with n from 1 to count allNames
set curItem to item n of my allNames
-- bei einer Übereinstimmung ...
if curItem is docName then
-- … das Datum holen ...
set curDate to date of photo n
-- … und die Schleife verlassen
exit repeat
end if
end repeat
end tell

-- wenn das Datum nicht leer ist
if curDate is not "" then
-- das Jahr zuweisen
set curYear to year of curDate
-- den Index des Monats feststellen und das entsprechende Element der Liste
set m to (get month of curDate) as integer
set curMonth to item m of monthNames

-- der Jahresordner
set yearFolder to (targetFolder & curYear) as string
-- testen, ob der Jahresordner vorhanden ist...
tell application "Finder"
-- wenn nicht vorhanden, den Ordner erzeugen ...
if not (yearFolder exists) then
try
make new folder at targetFolder with properties {name:curYear}
end try
end if
end tell

-- der Monatsordner
set monthFolder to (yearFolder & ":" & curMonth) as string
-- testen, ob der Monatsordner vorhanden ist...
tell application "Finder"
-- wenn nicht vorhanden, den Ordner erzeugen ...
if not (monthFolder exists) then
try
make new folder at yearFolder with properties {name:curMonth}
end try
end if
end tell

-- die aktuelle Datei kopieren
try
tell application "Finder" to move aFile to monthFolder with replacing
end try
end if
end processFile

Jetzt sollte es auch bei Dir funktionieren.

Gruss, Hans


als Antwort auf: [#524437]

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

10. Mär 2014, 09:10
Beitrag # 13 von 17
Beitrag ID: #524663
Bewertung:
(7399 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Hans,

ganz ganz herzlichen Dank, das Skript läuft jetzt perfekt und auch die Geschwindigkeit ist jetzt so, als wenn kein Skript "dazwischen" wäre.
Ich bin restlos begeistert, vielen vielen Dank für Deine Unterstützung.

Peter


als Antwort auf: [#524662]

Bilder aus iPhoto per Script in Folder kopieren

Wolkennest
Beiträge gesamt: 7

12. Mär 2014, 08:07
Beitrag # 14 von 17
Beitrag ID: #524767
Bewertung:
(7339 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Hans,

ein Feedback nach einem Tag intensiver Nutzung des Skripts:

wenn ich eine größere Anzahl Bilder gleichzeitig kopiere, kommt es manchmal vor, das das Skript nicht alle Dateien abarbeitet.

Selbiges kopiert ja zunächst alle in iPhoto ausgewählten Bilder in das "Primärverzeichnis" mit dem Namen des Kindes, das funktioniert einwandfrei. Dann analysiert das Skript die kopierten Bilder und legt sie in das Verzeichnis "Jahr/Monat" ab. An dieser Stelle kommt es hin und wieder vor, dass nicht alle Dateien bewegt werden (die passenden Ordner werden bei nicht Vorhandensein zuverlässig angelegt). Nun lässt sich das Ganze leider nicht an einer bestimmten Bilderzahl festmachen, denn einmal funktioniert das Skript, und mit exakt den gleichen Bildern in einem anderen Ordner arbeitet es dann unvollständig. Hast Du eine Idee, woran das liegen könnte?

Grundsätzlich hat mir das Skript aber unendlich Zeit gespart, mein Aufwand zur Zuordnung der Bilder ist bestimmt um ⅔ gesunken.

LG
Peter


als Antwort auf: [#524663]

Bilder aus iPhoto per Script in Folder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

12. Mär 2014, 08:45
Beitrag # 15 von 17
Beitrag ID: #524770
Bewertung:
(7331 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Peter,

das Script kopiert die Dateien nicht. Aber es bildet eine Liste, geht diese Liste durch, holt sich bei jedem Objekt bei iPhoto das Datum und gibt dann dem Finder den Auftrag, bei Bedarf die Ordner zu erzeugen und die Datei zu verschieben.

Dateien, welche nicht "versorgt" sind, würde ich ganz einfach in einen anderen Ordner schieben und gleich darauf wieder zurück in den Ordner des Kindes.

Vielleicht sollte im Script nach jeder Datei eine kleine Pause eingefügt werden. Ich werde dies heute Abend ausführen. Denn jetzt gerade bin ich auf der Fahrt in die Berge. Und habe dieses Mal die Alpin-Skier dabei. :-)

Gruss, Hans


als Antwort auf: [#524767]
X