IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> script erroné [màj : Editeur de script buggué], help de la part d'un profane
Options
MacEmbert
posté 5 Mar 2018, 11:38
Message #1


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



Bonjour,

Je cherche à traiter des lots de photos sur Photos.app. J'ai trouvé ici un script adhoc.

Mais Automator refuse de l'exécuter au motif d'une erreur de syntaxe.
Ne connaissant pas l'Apple Script, je suis perdu. Pourriez-vous m'aider ?

Voici la description du script par son auteur :
It's an application what will batch change the title of selected photos to the following format:

EXIF Capture Date (System's Short Date)–Description–Padded Sequential Number

Voici le script :
Code
on run {input, parameters}
  -- batch change the title to the input, © léonie, version 1.0.1

  set n_digits to 2 -- how many digits for the appended number
  set answer to display dialog "Select the number of digits for the appended numbers (0 .. 10).  Selecting '0' will suppress the leading zeros." buttons {"o.k"} default answer n_digits

  set n_digits_text to the (text returned of answer)
  set n_digits to n_digits_text as number

  tell application "Photos"
  activate
  set counter to 1
  set imageSel to (get selection) -- get selected images
  if imageSel is {} then
  error "Please select some images."
  else
  repeat with next_image in imageSel
  -- the counter with padded numbers
  set ntext to the counter as text
  repeat while (the length of ntext < n_digits) -- add leading zeros
  set ntext to "0" & ntext
  end repeat

  -- retrive the date
  set capture_date to (the date of next_image)
  set short_capture_date_string to the short date string of capture_date
  -- set capture_time_string to the time string of capture_date

  set new_title to short_capture_date_string & "-" & input & "-" & ntext as text

  tell next_image
  set the name to new_title as text
  set counter to counter + 1
  end tell
  end repeat
  -- return new_title
  end if
  end tell
  return input
end run


PS je suis sous Sierra, avec Automator 2.7 (2016)

Ce message a été modifié par MacEmbert - 5 Mar 2018, 17:18.


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post
MacEmbert
posté 5 Mar 2018, 17:03
Message #2


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



J'ajoute une précision :

Le script fonctionne sur un macbook pro de 2011, sous Sierra également, mais ne fonctionne pas sous un iMac 2017…

L'app Editeur de script de l'iMac semble de fait avoir un problème : impossible de compiler, impossible d'ouvrir d'anciens scripts, et impossibilité d'exécuter un script (alerte 'erreur de syntaxe'), ni le même script au format service.

Il y a un bug connu de l'Editeur de script ?

Merci


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post
PBell
posté 5 Mar 2018, 22:05
Message #3


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonsoir,
Je n'ai pas Sierra, mais El Capitain et ton script se compile sans problème sur mon l'Editeur de script.
De nombreux blog ont reportés des problèmes Applescript sur Sierra pour lequel le dictionnaire de donnée a des lacunes.

Pour trouver d'où vient le problème, il faut tester ton script par morceaux sur l'éditeur.
En général, lorsque l'éditeur de script trouve une erreur de compilation, il indique un message permettant de trouver d'où vient l'erreur.
Il faudrait indiquer ce message d'erreur.

D'abord, fait une copie de sauvegarde de ce script.

Commence par retirer le "on run" au début et, à la fin le "return input" et le "end run". Compile dans l'éditeur (compiler et pas exécuter !)
Je pense que tu auras toujours l'erreur...?
Si c'est le cas, supprimer toutes les lignes avant le "tell application "Photos". Compile et regarde si erreur ou pas.

Si tu as encore une erreur, je soupçonne 2 possibilités:
- le dictionnaire applescript de Photos sur Sierra ne contient plus soit la propriété name soit la propriété date (ou les 2 !). Dans ce cas, pas de salut !! sauf à ce que Apple corrige.
- la variable 'counter' pose un problème sur Sierra (utilisé comme mot réservé). Dans ce cas, il suffit de remplacer partout "counter" par "mycounter" et recopier.

Voilà pour le debuging de ton script actuel.

Sur un plan plus pratique, le résultat de ce script (quand il fonctionnera) me laisse dubitatif.
Je gère pas mal de photos et je vois plusieurs inconvéniants pour la gestion des photos:
1) saches que tous ceux qui ont expérimenté le passage de iPhoto à Photos ont bien compris que s'en remettre à Apple pour la gestion des titres, dates et mot clés représente un risque de tout perdre lorsque Apple changera encore d'application (ou l'arrêtera). Je ne parle même pas des photos que tu voudras retrouver par titre ou mot clé dans 20 ans (photos de famille par exemple).
Il est donc fortement conseillé de mettre les titres, mot-clé, et autre dans la photo elle-même (exif tags), plutôt que dans une base de données gérées en parallèle des photos (comme iPhoto ou Photos).
Donc si tu mets des titres avec ce script, ils seront perdus lorsque tu quittera Photos. Peut être n'est-ce pas important dans ton cas...?

2) le nouveau titre que tu donnes débute par la date de la photo. C'est une bonne idée quoique j'aurai tendance à mettre cela dans le nom du fichier photo plutôt que le titre comme indiqué ci-dessus. Il reste que les dates jj-mm-aaaa sont impossibles à classer. Par contre aaaa-mm-jj se classe par défaut par ordre chronologique. Donc en général, je conseille de mettre les dates dans ce format inversé, commençant par l'année.
Note que j'ai tout de suite omis le format avec des '/' car ce type de caractère pose des problème un jour ou l'autre et est interdit comme nom de fichier.

3) d'un point de vue technique, ton script est un peu lourd. De plus si tu saisis par erreur un nombre de digits non numérique, le script plante. Il faudrait ajouter une vérification.


Avec les réserves ci-dessus et en supposant que ce ne soit pas un problème de dictionnaire Photos dans l'éditeur Applescript, voici une version du script qui fait la même chose, mais avec gestion de l'erreur et une date inversée :
CODE
on run {input, parameters}
    set Ninput to input
    
    set n_digits to 2 -- how many digits for the appended number
    set answer to display dialog "Select the number of digits for the appended numbers (0 .. 10).  Selecting '0' will suppress the leading zeros." default answer n_digits    
    set n_digits_text to the (text returned of answer)
    try
        set n_digits to n_digits_text as number
    on error -- gestion de l'erreur si nombre de digits saisi est incorrect
        set n_digits to 2
    end try
        
    tell application "Photos"
        activate
        set Mycounter to 1
        set imageSel to (get selection) -- get selected images
        repeat with next_image in imageSel
            set Ntext to "0000000000" & Mycounter
            set Ntext to text -(n_digits) thru -1 of Ntext -- ajuste le compteur sur n_digits
            set myDate to (date of next_image) -- extrait la date de l'image
            tell me to set Sdate to reverseDate(myDate) -- converti la date en aaaa_mm_jj
            set new_Title to Sdate & "-" & Ninput & "-" & Ntext -- défini le nouveau titre =date-input-compteur
            set the name of next_image to new_Title as text
            set Mycounter to Mycounter + 1
        end repeat
    end tell    
end run

on reverseDate(LDate) -- renvoie la date sous forme aaaa_mm_jj
    set SD to text -2 thru -1 of ("00" & (day of LDate))
    set SM to text -2 thru -1 of ("00" & ((month of LDate) as integer))
    return ((year of LDate) as text) & "_" & SM & "_" & SD
end reverseDate


Si la compilation plante dans l'éditeur, il y a 90% de chance que ce soit bien un problème de dictionnaire applescript dans Sierra.
C'est pour éviter ce genre de problème que j'ai des scripts qui renomment, mettent des mots clé, ajustent les date de prise de vue,...pour gérer mes photos directement dans les fichiers photos. Je n'importe les ficher dans Photos qu'après. Les fichiers sont ainsi compatibles même avec Window qui gère aussi les Exif tag.

Cordialement



--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
teddy7545
posté 5 Mar 2018, 22:54
Message #4


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 879
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Bonsoir

Je suis assez d'accord avec les remarques de PBell et les limites/insuffisances du script.
Le stockage de ces infos dans une base de iPhoto est sans doute moi pérenne que la modification du nom de fichier ou dans les photos même (EXIF tags).

Je viens d'essayer le script avec Automator (même version que toi) sous Sierra, et tout fonctionne toutefois correctement (pas d'erreur si utilisé correctement).

Comment as tu configuré automator ? qu'as tu choisi comme option au départ ? As tu bien choisi Application ??
Comment l'utilises tu ?
As tu une base de donnée dans Photo dans laquelle tu as sélectionné les photos que tu souhaite traiter (avant de lancer automator)?

Quelle différence fais tu entre l'utilisation de ton macbook pro de 2011 et celle sur ton iMac 2017 ??

Cordialement.

Ce message a été modifié par teddy7545 - 5 Mar 2018, 23:19.


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post
MacEmbert
posté 6 Mar 2018, 16:27
Message #5


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



Merci pour vos réponses.
Elles vont me demander un peu de travail et là des clients m'attendent.

En deux mots :
iMac 2017 utilisé pour boulot archi et Photos gestion photos de chantier
MacBook Pro idem mais délaissé car puissance et rapidité moindres (forcément : âge 2011).

Jusqu'à aujourd'hui encore j'utilise iPhoto mais j'envisage de passer à Photos, d'où ces tests de scripts. Les photos passent avec une rapidité imbattable de mon iPhone au mac.
Tout cela est nettement plus efficace que le processus actuel :
iPhone => Photos sur mac => export depuis Photos => passage dans une application Automator pour renommer les fichiers photos en AAAAMMJJ-HM-nom-numéro => import dans iPhoto.

A la fermeture d'un dossier j'exporte pour archivage, en demandant que le titre devienne nom du fichier. Vous avez tout à fait raison quant aux questions de pérennité qui se posent pour les formats numériques.

Pour l'anecdote, j'ajoute que, pour les besoins du script, afin d'avoir un format de date en AAAAMMJJ j'ai modifié le format de date dans les Préférences Système > Langue et région > Avancé > Dates > Moyen

---

Voilà pour le contexte.
Je ferai les tests que vous me suggérez sur le script, mais je suis assez circonspect car actuellement l'éditeur de script est tout simplement amorphe. La fonction Quicklook sur les scripts donne du charabia, comme s'il ne parvenait plus à lire des scripts existants, y compris ceux que j'ai ouverts il y a 6 semaines.
Le MacBook Pro est sous Sierra également mais ne pose aucun problème. C'est donc l'iMac qui semble en cause.

Edit :
Je viens d'ailleurs de confirmer cela par un test essai : l'ouverture de scripts depuis un autre compte sur l'iMac.
Les problèmes sont les mêmes :
- compilation impossible (le bouton compiler n'a aucun effet, même pas une alerte)
- enregistrement d'un nouveau fichier script impossible
- dans Automator, la demande de compilation se conclut par une alerte "erreur de syntaxe"

Ce message a été modifié par MacEmbert - 6 Mar 2018, 16:40.


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post
MacEmbert
posté 7 Mar 2018, 23:56
Message #6


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



Après réinstallation de Sierra, tout est rentré dans l'ordre. Toutes les applis utilisant des scripts étaient bloquées (notamment Onyx, Diskmaker…). A présent tout roule.

PBell, ton script m'intéresse dans la mesure où il évite de devoir tripatouiller dans les formats de date des préférences système.
Il manque juste une ligne pour avoir l'heure derrière la date, ce que je fais via ces lignes
Code
set capture_time_string to the time string of myDate
set new_title to Sdate & "-" & capture_time_string & "-" & Ninput & "-" & ntext -- défini le nouveau titre =date-heure-input-compteur


Maintenant je me demande s'il est possible d'avoir une date en AAAA-MM-JJ plutôt que AAAA_MM_JJ

Merci !

Ce message a été modifié par MacEmbert - 8 Mar 2018, 00:21.


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post
PBell
posté 8 Mar 2018, 07:31
Message #7


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
QUOTE (MacEmbert @ 7 Mar 2018, 23:56) *
Maintenant je me demande s'il est possible d'avoir une date en AAAA-MM-JJ plutôt que AAAA_MM_JJ


Il suffit de changer les "_" par des "-" dans la ligne qui formate la date: la dernière ligne avant la fin dans la sub routine ReverseDate.
En fait lorsque j'écris un script un peu long, susceptible d'être modifié plus tard, je définie une constante en début de script, par exemple Sep en lui assignant un séparateur.
Dans toutes les occurrences du script, je emplace les "-" ou "_" par Sep. C'est ainsi plus lisible et facilement modifiable.

Ici, le script est court donc facilement lisible !

Si tu souhaites aller plus loin dans la gestion des photos (titres, compteurs, mots clés, pivoter...) je te suggère de regarder Exif tool.
Avec Exif tool (gratuit) j'ai un script avec un ensemble de routines, le script étant sauvé sous forme de service Automator.
Lorsque que je récupère des photos, je les sélectionne, click droit et leur applique ce que je souhaite.
L'avantage d'Exif tool est, par exemple, que les mots-clés sont enregistrés dans le jpg, sont préservés si tu envoies la photo à une autre personne sur Mac, Windows, Linux,...

Cordialement


--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
MacEmbert
posté 9 Mar 2018, 14:17
Message #8


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



Merci. J'ai adopté ton script pour mes photos, car plus autonome que l'autre en effet.
Y a-t-il moyen d'extraire l'heure de l'image sans passer par "time string" (qui fait appel à l'heure donnée par les préférences système, si j'ai bien compris) ?

Cela donne vraiment envie d'apprendre à l'AppleScript. Me revient le lointain souvenir de mon cours d'informatique au Collège dans les années 80, où j'avais appris les rudiments du Basic. On composait avec ce langage des petits scripts justement, qui exerçaient notre rigueur logique. C'était assez ludique et j'ai ici cette même impression, l'utilité et l'efficacité étant la cerise sur le gâteau puisqu'au final cela profite à mon bizness. Fin du mode anecdote.

J'irai voir Exif Tool mais déjà une question : Exif tool peut-il s'appliquer à des photos stockées à l'intérieur d'une photothèque Photos ? (par le biais d'un Service comme dans le cas du script objet du présent thread)

Ce message a été modifié par MacEmbert - 9 Mar 2018, 14:30.


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post
PBell
posté 9 Mar 2018, 14:38
Message #9


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



QUOTE (MacEmbert @ 9 Mar 2018, 14:17) *
Exif tool peut-il s'appliquer à des photos stockées à l'intérieur d'une photothèque Photos ?


Oui et Non, Exif tool gère les métadata des fichiers (photos ou autre d'ailleurs). Ce qui permet d'avoir des données liées à la photo elle-même, même si elle est envoyée ailleurs (sortie de Photos, envoyée sur un autre Mac, un Windows, un Linux,..).
Il faut donc s'occuper des titres, dates, mots-clés et autres avant de dropper les photos dans Photos. Par contre Photos lit bien ces métadata qui sont dans les fichiers.

Si les photos sont déjà dans Photos, et si tu ajoutes un mot-clé au fichier, Photos ne le relit pas car il ne lit les données que lors de l'ajout initial du fichier de photo.

Cordialement


--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
MacEmbert
posté 10 Mar 2018, 12:26
Message #10


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



OK c'est clair
Merci


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th April 2024 - 08:49