# Automator petit script



## xoxixox (18 Mai 2010)

Bonjour a tous,
je vous explique mon probleme :

- d'abord je n'y connais rien en scripts (ça commence bien !!) Je suis photographe.

- Je fais des photos avec des objectifs anciens, manuels, et qui ne donnent aucunne information au boitier, comme l'ouverture, la focale, et le nom de l'objectif. Ces données sont des données EXIF, tous les fichiers issus des appareils modernes en ont.

- J'ai un logiciel (Exiftool) qui fonctionne en ligne de commande pour ajouter ou modifier les données EXIF d'un fichier image une fois qu'il est sur le Mac

-J'ai trouvé un tuto pour faire une appli Automator qui va modifier : Le nom de l'objectif, La focale, et l'Ouverture. 

voici ce qu'exécute Automator :
1/Demander des éléments du Finder
2/Exécuter un script Shell
do
   exiftool -overwrite_original -Lens='Pentax SMC A* 135mm f/1.8'-ApertureValue='1,8' -FocalLength='135' "$f"
done

Donc en ouvrant une image avec cette Appli, je vais inscrire dans ses données EXIF :
Objectif : Pentax SMC A* 135mm f/1.8
Ouverture : 1,8
Focale : 135mm

Mon souci c'est qu'il existe une infini possibilité de combinaison
imaginons que j'ai 10 objectifs qui ouvrent chacun à 8 ouvertures différentes
Je vais devoir me faire 80 applis différentes pour couvrir toutes les combinaisons
Fastidieux non !!!

Donc, je me suis  dit, qu'il faudrait que ma petite appli à l'ouverture ou quand elle va traiter l'image me demande par une boite de dialogue 3 champs : Objectif, Focale, Ouverture, et ensuite quand je cliquerai sur OK, va tranquilement m'inscrire les données dans l'EXIF de l'image.

Helppppppppppp

Je sais absolument pas comment faire ça  cela ne doit pas etre très complique mais j'y connais rien
Une bonne ame peut prendre un peut de temps pour me dire quoi faire ?

Merci d'avance


----------



## Anonyme (18 Mai 2010)

Bonjour,

Avant l'action  "*Exécuter un script Shell*", insère l'action "*Exécuter un script AppleScript*".
Copie et colle ce code dans l'action  "Exécuter un script AppleScript" :

```
on run {input, parameters}
	set r to text returned of (display dialog "Entrez les exifs" default answer "{\"objectif\", \"focale\",\"ouverture\"}")
	set r to run script r
	return r & input
end run
```

Dans l'action "Exécuter un script Shell".
Selectionne le Shell Bash.
Copie et colle ce code :

```
var1="$3"
var2="$2"
var3="$1"
shift 3
for f in "$@"
do
	exiftool -overwrite_original -Lens="$var1" -ApertureValue="$var3" -FocalLength="$var2" "$f"
done
```


----------



## xoxixox (18 Mai 2010)

Merci infiniment pour cette réponse super rapide   

le seul souci, c'est que ça ne marche pas,  aucunes données n'est inscrite dans le fichier

Je rentre les données ainsi dans la boite de dialogue :

{"Carl Zeiss Jena Biotar 135mm f/2.3", "135","5,6"}

on est d'accord (je garde les parentheses, les guillemets et les virgules)

?????


----------



## Anonyme (18 Mai 2010)

Bonjour,



xoxixox a dit:


> Je rentre les données ainsi dans la boite de dialogue :
> 
> {"Carl Zeiss Jena Biotar 135mm f/2.3", "135", "5,6"}
> 
> ...


Oui, c'est bien ça

C'est un problème de (quotes), aussi les variables $3 et $1 dans le shell était inversée
le code du shell modifié*:
	
	



```
var1=$1
var2=$2
var3=$3
shift 3
for f in "$@"
do
	exiftool -overwrite_original -Lens="$var1" -ApertureValue="$var3" -FocalLength="$var2" "$f"
done
```

Testé et ça fonctionne bien ici avec les mêmes données que toi, sauf que le *5,6* doit être *5.6*


----------



## xoxixox (18 Mai 2010)

Yes, ça marche super :rateau:

Parcontre, en épluchant un peu le manuel d'Exiftool, on s'appercoit que les innformations comme l'ouverture est stockée à plusieurs endroits sous différents tag

j'ai donc modifié le script comme ceci :

var1="$1"
var2="$2"
var3="$3"
shift 3
for f in "$@"
do
    exiftool -overwrite_original -Lens="$var1" -FocalLength="$var2" -ApertureValue="$var3" -FNumber="$var3" "$f"
done


Donc si j'ai bon, *ApertureValue* et *FNumber* vont tous les deux avoir la valeur de la variable 3

Question : a quoi sert *shift 3

*et requestion, est ce que ce serait possible (tappez pas) d'avoir une boite de dialogue avec 3 champs distincs, ou on rentre les données, mais sans se préocuper des parentheses, des guillemets et les virgules ???


----------



## ceslinstinct (18 Mai 2010)

xoxixox a dit:


> Yes, ça marche super :rateau:
> 
> [/B]et requestion, est ce que ce serait possible (tappez pas) d'avoir une boite de dialogue avec 3 champs distincs, ou on rentre les données, mais sans se préocuper des parentheses, des guillemets et les virgules ???


Bonjour

Avec une boite de dialogue en AppleSript (normalement n'accepte qu'une donnée à la fois, sauf si on l'oblige à prendre plusieurs lignes de données).

Et un *do shell script* pour lancer ton code du terminal (AppleScript peut donner des commandes au terminal).

Le terminal j'y connaît pas grand chose, donc je ne peut t'aider c'est juste pour donner une idée.

@+


----------



## xoxixox (18 Mai 2010)

Merci pour l'aide, mais j'ai rien compris   enfin si, mais comment faire tout ça !!!
En programation, mes connaissances se limitent au copier coller 
bon, je suis capable de suivre une logique, mais c'est a peut près tout


----------



## ceslinstinct (18 Mai 2010)

xoxixox a dit:


> Merci pour l'aide, mais j'ai rien compris   enfin si, mais comment faire tout ça !!!
> En programation, mes connaissances se limitent au copier coller
> bon, je suis capable de suivre une logique, mais c'est a peut près tout


Je peut te donner un exemple de code pour la sélection des données dans une boite de dialogue.

Pour voir si cela peut te rendre service.

@+


----------



## xoxixox (18 Mai 2010)

Pourquoi pas, merci


----------



## ceslinstinct (18 Mai 2010)

xoxixox a dit:


> Pourquoi pas, merci



un exemple de code:


```
set {objectif, ouverture, focale, cr} to {"", "", "", return}

repeat
	set listeMemoire to ""
	set listeMemoire to listeMemoire & "Objectif " & tab & tab & ": " & objectif & cr
	set listeMemoire to listeMemoire & "Ouverture " & tab & ": " & ouverture & cr
	set listeMemoire to listeMemoire & "Focale " & tab & tab & ": " & focale
	-- Entrez les données
	display dialog "Entrez les informations :" default answer listeMemoire buttons {"Annuler", "OK"} default button 1 with title "Vos données"
	
	set x to text returned of the result
	
	-- Mémorisation dans les variables des donnée à écrires par le terminal
	set {ad, AppleScript's text item delimiters} to {AppleScript's text item delimiters, ":"}
	set {objectif, ouverture, focale} to {(last text item of paragraph 1 of x), (last text item of paragraph 2 of x), (last text item of paragraph 3 of x)}
	set AppleScript's text item delimiters to ad
	
	-- Contrôle si les données sont correctes (en option, supprimer repeat aussi)
	display dialog objectif & cr & ouverture & cr & focale buttons {"OK", "Modifier"} default button 1 with title "Ce sont les données recherchées ?"
	if (button returned of the result) is "OK" then exit repeat
end repeat

-- Commande à ajouter pour le terminal en utilisant les variables
```

C'est pas très esthétique comme fenêtre, mais c'est le résultat qu'on recherche.

Automator, je connaît que de nom, donc ce code est à utiliser comme un AppleScript (même avec Automator).

Testé avec Léopard 10.5.8

@+


----------



## xoxixox (18 Mai 2010)

Ben voilà, j'ai plus qu'a aprendre le chinois 
bon, j'ai copié coller ce code dans Automator : Exécuter un script AppleScript

et quand je le lance j'ai une erreur ici : default button 1 with title *"*Vos données"

Erreur de syntaxe
fin de ligne, etc. prévu mais « " » trouvé.

:hein:

Bon en tous cas un super grand merci pour ton aide, votre aide à tous les deux !!


----------



## ceslinstinct (18 Mai 2010)

xoxixox a dit:


> Ben voilà, j'ai plus qu'a aprendre le chinois
> bon, j'ai copié coller ce code dans Automator : Exécuter un script AppleScript
> 
> et quand je le lance j'ai une erreur ici : default button 1 with title *"*Vos données"
> ...



Tu as testé le code en AppleScript?

Tu créer un AppleScript et tu donne le lien à Automator.

Supprime le code 
	
	



```
with title "Vos données"
```

Si tu dit le système que tu utilise, je peut te dire que ça aide bien.

@+


----------



## xoxixox (18 Mai 2010)

Bon en fait, si je l'éxécute directement dans applescript, ca fonctionne, si je suis dans Automator et que je lui di d'exécuter un script Applescript, j'ai des erreurs :hein:

*Mac_Jac*, tu en penses quoi ?


----------



## Anonyme (19 Mai 2010)

xoxixox a dit:


> Bon en fait, si je l'éxécute directement dans applescript, ca fonctionne, si je suis dans Automator et que je lui di d'exécuter un script Applescript, j'ai des erreurs :hein:
> 
> *Mac_Jac*, tu en penses quoi ?


shift 3 : c'est pour commencer à lire la liste ("*$@*") à partir du quatrième élément, parce que les trois premiers sont les données exif.

Le "display dialog" dans automator  n'est pas le même que celui de l'osax "*Standard additions*", la hauteur du champ est fixe, donc on be peut pas utiliser la solution de ceslinstinct dans Automator, à moins d'utiliser un script externe.


Voici une action que j'ai faite aujourd'hui, si tu veux l'utiliser :
Télécharge-le : http://forums.macg.co/attachments/d...tomator-petit-script-custom-dialog.action.zip
Installe dans le dossier "*Automator*" d'une des trois bibliothèques (systeme, disque de démarrage ou celui dans la maison).

Quitte Automator relance-le.
Remplace l'action "*Exécuter un script AppleScript*"  par l'action "*dialogue 3 champs*" ), il sera dans Utilitaires.

Dans l'action "*dialogue 3 champs*", clic  sur "Option" et coches "Afficher cette action si le processus est executé".

Lors du lancement du processus ou de l'application, tu auras un dialogue qui s'affichera avec ces trois champs.
C'est tout.


----------



## xoxixox (19 Mai 2010)

*Mac_Jac *   je suis bluffé !

Mais, cela me donne une erreur :

J'ai inséré à la place de "*Exécuter un script AppleScript*" ton "*dialogue 3 champs*"
puis j'ai toujours le Exécuter un script Shell

quand je lance le processus,
après avoir rentré les données 

j'ai un message d'erreur : "*Il est impossible d'obtenir box 1 of split view 1 of window 1. Index non valide. (-1719)*"

- est ce que c'est possible d'avoir un intitulé avant chaque champs :
Objectif : ...........
Focale : .............
Ouverture : ............

- Peut tu me contacter par mail laurent(AT)lavalentin(POINT)fr


----------

