La boîte à Tutoriels de Christopher PECAUD

Top

Création de scripts Applescript pour l'application Photos

Laisser un commentaire

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

VI Conclusion

Ce document vous a permis de voir comment utiliser Applescript avec l’application Photos d’Apple. Nous avons vu par ces deux exemples de script qu’il est assez simple d’automatiser certaines tâches fastidieuses comme le rangement des photos. La bibliothèque de script liée à l’application permet d’effectuer d’autres tâches que je vous invite à tester comme l’export de photos vers un fichier ou la création de diaporamas.
blog comments powered by Disqus