Création de scripts Applescript pour l'application Photos
SOMMAIRE
I Introduction
II Le dictionnaire Applescript de Photos
III Obtenir des informations sur des photos
IV Déplacer des photos dans un album spécifique
V Conclusion
I Introduction
Dans ce document nous allons voir comment automatiser certaines tâches Photos en utilisant le langage de scripts Applescript fourni par Apple. En effet l’application Photos est « scriptable » c’est-à-dire qu’elle possède un dictionnaire AppleScript regroupant un certain nombre de propriétés et fonctions permettant de réaliser un grand nombre de tâches comme la création d’un album et le déplacement de photos dans cet album. C’est ce que nous allons réaliser dans ce tutoriel.
II Le dictionnaire Applescript de Photos
Pour pouvoir accéder au dictionnaire de l’application Photos il suffit de lancer l’éditeur de Scripts AppleScript et de naviguer dans le menu « Fichier » de l’application et ensuite sélectionner la commande « Ouvrir le dictionnaire ».
Comme toute application scriptable Photos prend en charge des fonctions et des propriétés de base incluses dans la « Standard Suite ». Elles vous permettent d’obtenir des informations sur l’application telle que son nom, sa version, etc…
Nous avons ensuite accès à une suite de fonctions et propriétés personnalisées par l’intermédiaire de la « Photos Suite ». Celle-ci va vous permettre par exemple de :
- D’importer un ensemble de photo par l’intermédiaire de la fonction et de les ranger dans un objet Album. La liste des photos importées est stockée dans un tableau ;
- D’exporter un ensemble de photos à partir d’un objet source vers une autre destinations en tant que fichiers image grâce à la fonction export. Vous pourrez effectuer une conversion en même temps ou garder le format d’origine.
- Vous pourrez automatiser la création d’un dossier ou un album grâce à la fonction make ou au contraire en supprimer par l’intermédiaire de la fonction delete ;
- Vous pourrez ajouter des photos dans un album ;
- Vous pourrez réaliser et gérer un diaporama de photos ;
Les objets gérés par le dictionnaire sont les suivants :
- L’objet application qui reprend les propriétés de la suite standard pour en ajouter quelques autres comme les albums favoris, la liste des images sélectionnés dans l’application, une propriété de type booléen qui permet de savoir si un panorama est en train de s’exécuter, ainsi que la liste des albums récemment supprimés (recently deleted album) ;
- L’objet media item qui représente une photo dans le cas de l’application Photos contenues par un objet album. Vous pourrez récupérer les mots-clés associés s’il en existe (keywords), le nom (name), la description (description), si le media est considéré comme favoris (favorite), la date de création de la photo, etc…
- L’objet de base Container qui est la classe de base des objets albums et dossiers par exemple et qui permet d’obtenir l’identifiant du conteneur (id), son nom (name) et son dossier parent (parent) ;
- La classe album qui permet de créer ce type d’objet pour permettre d’y ajouter des photos
- La classe folder qui permet de créer un dossier auquel on pourra associer une liste de photos.
Le dictionnaire Appescript est assez simple à comprendre la syntacxe d’une ligne de commande suit la même logique. Par exemple pour créer un nouveau dossier nous écrirons la ligne de code suivante :
make new folder named MyAlbum at MyParentFolder
Ou encore cette ligne de code pour ajouter une photo à un album :
Add PhotosList to MyAlbum
Nous avons fait un tour d’horizon de toutes les fonctionnalités offertes par le dictionnaire utilisables avec AppleScript pour automatiser la gestion de vos photos sans le faire manuellement.
Nous allons voir maintenant comment utiliser ces différentes possibilités dans des scripts.
III Obtenir des informations sur des photos
Nous allons voir comment utiliser cette bibliothèque pour créer des scripts afin d’automatiser certaines tâches. Dans ce premier exemple nous allons créer un script permettant de recueillir des propriétés sur une ou plusieurs photos que nous aurons sélectionnées auparavant dans un containeur (album ou dossier).
Afin de pouvoir travailler avec l’application Photos il faut dans un premier temps l’exécuter :
tell application « Photos »
activate
….
end tell
Toutes les lignes de code seront incluses dans le bloc « tell …end tell ». Vous pouvez rendre active l’application par l’intermédiaire de la fonction activate. Nous allons ensuite définir la liste des photos que nous avons sélectionnées manuellement dans l’application Photos :
set selected_photos to selection
Nous allons définir ensuite une variable qui va permettre de compter le nombre de photos sélectionnées.
set selected_photos_count to the count of seleted_photos
Ensuite pour vérifier que ce compte est bien égal à toutes les images sélectionnées nous pouvons créer une boîte de dialogue affichant ce nombre comme ceci :
display alert selected_photos_count
Pour obtenir les propriétés de toutes les photos sélectionnées nous allons ensuite créer une boucle de type repeat … end repeat
Voici comment créer ce type de boucle en Applescript pour parcourir chacune des photos sélectionnées :
repeat with i from 1 to seleccted_photos_count
…
end repeat
C’est à l’intérieur de cette boucle que nous allons obtenir certaines des informations associées à nos photos comme la date de création (propriété date), le nom associé à la photo (name), le nom de fichier associé (filename), la taille de ce fichier (size).
Pour commencer il faut définir une variable associée à la photo que l’on va traiter :
set current_photo to item i of selected_photos
Ensuite nous pouvons récupérer les valeurs des différentes propriétés :
set photo_date to the date of current_photo as string
set photo_name to the name of current_photo
set photo_filename to the filename of current_photo
set photo_size to the size of current_photo
Nous pouvons ensuite visualiser ces informations sous forme d’une boîte de dialogue comme ceci :
display alert "date de création: " & photo_date & "
" & "nom : " & photo_name & "
" & "nom du fichier: " & photo_filename & "
" & "taille du fichier: " & photo_size
Voici le code complet de ce script :
tell application "Photos"
activate
set selected_photos to selection
set selected_photos_count to count of selected_photos
display alert selected_photos_count
repeat with i from 1 to selected_photos_count
set current_photo to item i of selected_photos
set photo_date to the date of current_photo as string
set photo_name to the name of current_photo
set photo_filename to the filename of current_photo
set photo_size to the size of current_photo
display alert "date de création: " & photo_date & "
" & "nom : " & photo_name & "
" & "nom du fichier: " & photo_filename & "
" & "taille du fichier: " & photo_size
end repeat
end tell
IV Déplacer des photos dans un album spécifique
Dans ce deuxième exemple nous allons voir comment déplacer des photos correspondant à une date donnée dans un album spécifique. Vous serez alors en mesure de classer vos photos simplement à l’aide d’un script en évitant de les déplacer à la main.
La structure de base étant la même que précédemment nous ne nous attarderons pas dessus.
Nous allons commencer par créer un ensemble de variables utiles pour le script. Dans un premier temps on crée une variable contenant le nom du dossier qui contiendra tous les albums de l’année « 2019 ». Nommons-le « 2019 » par exemple.
set managedfoldername to "2019"
Ensuite nous allons créer une variable de type liste de photos qui comprend toutes les photos incluses dans la photothèque, après un import « one shot » par exemple.
set photos_list to every media item
La dernière variable nous permet de stocker le nombre de photos sélectionnées :
set photos_list_count to count of photos_list
Il nous faut aussi créer une variable contenant la date de début de sélection des photos :
set Noel_Date to date "samedi 21 décembre 2019 à 00:00:01"
Et une autre nous permettant de de donner un nom à l’album. Nous lui donnerons le nom de « Noël ».
set albumname to "Noel"
Nous créons ensuite le dossier nommé « 2019 » en utilisant le verbe « make », s’il n’existe pas :
if (not (exists folder "2019")) then
make new folder named managedfoldername
end if
On met ensuite le focus sur le dossier créé :
set managedfolder to folder "2019"
Nous créons ensuite l’album associé dans le dossier « 2019 » créé auparavant :
set managedalbum to make new album named albumname at managedfolder
Comme dans le script précédent nous allons créer une boucle nous permettant de parcourir l’ensemble des photos sélectionnées :
repeat with i from 1 to photos_list_count
set current_photo to item i of photos_list
set current_photo_date to the date of current_photo
if current_photo_date > Noel_Date then
set photoslist to {current_photo}
add photoslist to managedalbum
end if
end repeat
A l’intérieur de la boucle comme vous le voyez nous testons la date de création de la photo avec la date stockée dans la variable que nous avons créée en début de script. Si la date correspond au test elle est ajoutée à l’album créé précédemment.
Comme vous le constater nous ne pouvons utiliser qu’une variable de type liste après le verbe « add », c’est pour cette raison que nous avons employé la notation {current_photo} qui crée une liste avec la photo courante.
Voilà le script complet :
tell application "Photos"
activate
set managedfoldername to "2019"
set photos_list to every media item
set photos_list_count to count of photos_list
set Noel_Date to date "samedi 21 décembre 2019 à 00:00:01"
set albumname to "Noel"
display alert photos_list_count
if (not (exists folder "2019")) then
make new folder named managedfoldername
end if
set managedfolder to folder "2019"
set managedalbum to make new album named albumname at managedfolder
repeat with i from 1 to photos_list_count
set current_photo to item i of photos_list
set current_photo_date to the date of current_photo
if current_photo_date > Noel_Date then
set photoslist to {current_photo}
add photoslist to managedalbum
end if
end repeat
end tell