Accueil > Les langages de scripting > AppleScript Primeure pour Mac OS X

AppleScript Primeure pour Mac OS X

Par Bruce W. Perry, auteur de AppleScript in a Nutshell, 01/02/2002

traduit par Thierry, le 23/09/2002

AppleScript est un outil Mac embarqué qui donne à l’utilisateur la possibilité de contrôler le système d’exploitation et plusieurs de ses applications favorites. Alors que ce système puissant de scripting a toujours été soutenu par les aficionados du Mac et les professionnels de l’édition, la version 10.1.2 de Mac OS X pourrait vouloir dire qu’AppleScript est prêt à montrer ses atouts à une plus grande audience. Voici quelques-uns des développements AppleScript sur Mac OS X :

  • AppleScript Studio, un outil de développement pour créer une application AppleScript dotée d’une interface graphique Aqua.
  • L’appel de commandes du shell Unix avec la commande AppleScript “do shell script” et la possibilité de scripter l’application Terminal de Mac OS X.
  • Services Web, qui permettent à des données spécifiques telles que les cotations de titres et les données Météo d’être transférées entre applications sur le Web en utilisant un format universel appelé Extensible Markup Language (XML).

Dans cet article, je commencerai par vous montrer où trouver les applications dans lesquelles vous développerez vos AppleScripts. Puis, pour continuer, je vous livrerai un exemple de script simple. Si vous êtes plus intéressé par le sublime que par le simple, je vous donnerai aussi des descriptions et des extraits de codes en rapport avec AppleScript Studio, les Services Web et l’intégration shell-Unix.

Pour ceux qui se montreraient impatients de plonger dans le scripting de leurs applications favorites, telles que Adobe Illustrator 10 ou FileMaker Pro, référez-vous à la barre latérale “Applications Mac Scriptables” pour une liste des applications qui peuvent être utilisées avec AppleScript.

Pour les débutants

Vous trouverez AppleScript en ouvrant une nouvelle fenêtre du Finder, en cliquant sur l’icône “Applications” puis en ouvrant le dossier AppleScript. Là, vous trouverez l’application Script Editor. (Vous pouvez aussi taper Option:Command:A pour aller au dossier Applications). Figure 1 montre une fenêtre de Script Editor et une fenêtre du Finder en mode Colonne, avec le dossier AppleScript sélectionné. Script Editor est similaire à un éditeur de texte dans lequel vous pouvez saisir un script, en vérifier la syntaxe et le compiler.

Applescripting Window

Voici un exemple de script simple. J’utilise une imprimante connectée à une machine Windows située dans un autre endroit de mon bureau. Bien que je ne puisse pas directement ajouter de documents dans la file d’attente de cette machine, je peux garder le disque de cette machine monté sur mon bureau et déplacer les fichiers que je veux imprimer dans un dossier “print” de cette machine distante (à partir de laquelle ils sont imprimés). Voici l’AppleScript qui fait ça :

Applications Mac Scriptables

Liste de quelques applications Mac OS X qui peuvent être contrôlées par des AppleScripts :

Apple System Profiler
ColorSync
Finder
Image Capture
iTunes (Voir l’encadré “Scripter iTunes 2″)
Mail
Print Center
QuickTime Player
Sherlock
Terminal
TextEdit
Interface Builder
Project Builder

Liste des applications de tierce partie :

Adobe Illustrator
Adobe Photoshop
BBEdit
Eudora Email
FileMaker Pro
Internet Explorer
Microsoft Word
Netscape Navigator
QuarkXPress
Stone Studio

tell application "Finder"
	activate
	move selection to folder "print" of disk "M"
end tell

Ce script cible l’application Finder et ses messages de script, qui sont techniquement référencés sur le Mac comme des “Apple events” (évènements Apple). Le bloc “tell” contient les instructions que l’application spécifiée peut comprendre; vous aurez compris que pour cibler d’autres applications avec AppleScript vous utiliserez une syntaxe dans le style “tell application “iTunes” ” ou “tell application “Adobe Photoshop®5.5″“.

La commande “activate” fait de l’application ciblée la couche active du bureau (ainsi les menus du programme sont affichés en haut de l’écran). Le fichier qui est sélectionné dans le Finder est alors déplacé vers un dossier appelé “print” sur un disque appelé “M” (sur une autre machine dans ce cas). Pour garder les choses simples, nous n’avons pas vérifié que le fichier sélectionné est réellement un fichier (nous ne souhaiterions pas déplacer un dossier), mais cet exemple devrait vous montrer combien il est facile de démarrer avec des scripts utiles et concis. Quelques applications (telles que BBEdit 6.5) générerons pour vous un AppleScript via la fonction d’enregistrement de Script Editor. Bien sûr, vous pouvez faire beaucoup plus avec AppleScript.

AppleScript Studio

La fonctionnalité la plus remarquable de Mac OS X 10.1.2 pour l’élaboration de scripts est AppleScript Studio. Cet outil permet de développer de très belles interfaces Aqua pour des applications AppleScript. Par exemple, Figure 2 montre la fenêtre d’une application AppleScript Studio qui demande à l’utilisateur le symbole d’une action, puis qui va rechercher son cours en faisant appel à des services Web et l’affiche en se basant sur la devise choisie.

AppleScript Studio a été incorporé à un environnement intégré de développement (IDE) constitué de Project Builder et de Interface Builder, les mêmes outils utilisés dans la création d’applications Cocoa en Java ou en Objective-C. AppleScript Studio est inclus dans les outils de développement Mac OS X de décembre 2001 (voir http://developer.apple.com/tools/macosxtools.html), librement téléchargeables pour les membres de l’Apple Developer Connection. On peut devenir membre de l’ADC en ligne et gratuitement, c’est donc une super affaire de pouvoir développer ses propres logiciels Mac OS X avec cet IDE riche en fonctionnalités et gratuit.

Applescript Studio Window

AppleScript Studio est une extension de Script Editor, tant sur le plan des fonctionnalités que de l’apprentissage. Dans une application AppleScript Studio, vous pouvez ajouter de nouvelles classes Java ou Objective-C à votre projet via Project Builder et appeler les méthodes de ces objets directement à partir d’AppleScript. la création d’interfaces sophistiquées dans Interface Builder est aussi facile que de glisser et déposer des objets d’interfaces Cocoa (tels que des champs texte, des boutons, des indicateurs de progression) à partir d’une palette vers la fenêtre d’une application AppleScript Studio. Figure 3 montre la fenêtre d’une application Studio et des palettes d’Interface Builder.

Studio app and palettes

AppleScript Studio s’apparente à un environnement prometteur de développement pour l’automatisation de tâches qui requièrent une action utilisateur.

Bonjour shell Unix

Les AppleScripteurs peuvent utiliser le shell Unix de deux manières différentes à partir de Mac OS X 10.1.2. La commande “do shell script” exécute une instruction shell Unix sans avoir à cibler une application spécifique. Par exemple, tapez le script suivante dans une fenêtre de Script Editor, puis compilez le et lancez le. Il exécutera trois commandes shell Unix, chacune étant séparée par un point-virgule.

do shell script "cd $HOME; pwd; ls -l"

Le script reçoit alors les valeurs de retour sous forme de chaîne de caractères (une suite de caractères, comme une phrase écrite, entourée de guillemets), qu’il peut alors traité selon ses propres désirs. Voici une portion de la réponse retournée au dernier script :

"/Users/brucep
total 0
drwxr-xr-x   7 brucep  staff   264 Nov 24 20:27 AllProps
drwxr-xr-x   5 brucep  staff   126 Jan  4 19:57 Applications
drwx------  17 brucep  staff   534 Jan 18 10:24 Desktop
drwx------  14 brucep  staff   432 Jan 18 10:17 Documents
..."

Scripter le Terminal

Vous pouvez aussi scripter l’application Terminal, qui est l’utilitaire de ligne de commandes installé avec Mac OS X. Le script suivant va faire apparaître une nouvelle fenêtre de Terminal et lancer le moteur de servelt Java Tomcat d’Apache et le serveur de base de données MySQL. Très utile !

ignoring application responses
	tell application "Terminal"
		activate
		do script with command ¬
		"/Users/brucep/bin/start_tomcat; /usr/local/bin/safe_mysqld &;"
	end tell
end ignoring

Le caractère “¬”, un caractère de continuation de ligne, est produit sur le Mac en tapant option:return. Le bloc “ignoring application responses/end ignoring” évitera au script de caler en attendant une réponse du Terminal. Pour plus d’informations sur l’instruction AppleScript “ignoring” se trouve sur la page 137 de mon livre, AppleScript in a Nutshell.


Spécial : Scripter ITunes

Voici un script qui lance iTunes 2, qui laisse l’utilisateur choisir un morceau par son titre et qui joue le morceau choisi.

tell application "iTunes"
activate
try
	set mainWindow to item 1 of browser windows
	set _playlist to the view of mainWindow
	set theSongs to the name of every track of _playlist
        set songTitle to choose from list theSongs with prompt "Choose a song to play"
	tell _playlist
	    set song to item 1 of ¬
	    (every track whose name contains the songTitle)
	end tell
	say "Now playing the song " & (name of song) & " by " & (artist of song)
        play song
        on error display dialog "Either a playlist is not selected or you canceled the dialog.
        Please try again."
end try
end tell

Ce script affiche tous les titres de chansons des morceaux contenus dans la fenêtre principale de iTunes. L’utilisateur peut alors sélectionner un titre à partir de la liste qui apparaît dans une boite de dialogue (la partie “choose from list theSongs” produit ce dialogue). La commande AppleScript “say” provoquera la prononciation par l’ordinateur de la phrase inscrite. Pour cette commande, la voix est configurée dans les préférences système Parole de Mac OS X. Vous pouvez même utiliser des “embedded speech commands” pour modifier la manière dont la commande “say” sera interprétée par AppleScript. Vor page 393 de “AppleScript In A Nutshell” pour plus d’informations sur les commandes de parole.


Services Web

Les Services Web sont des applications XML qui échangent des données spécifiques entre ordinateurs distants. Ces services reposent sur deux protocoles : XML-Remote Procedure Call (XML-RPC) et Simple Object Access Protocol (SOAP). Sans aller trop profondément dans des détails techniques, ces deux protocoles utilisent le protocole Hypertext Transfer Protocol (HTTP), le même mode de transfert de données que sur Internet, pour émettre et recevoir des informations à distance. AppleScript sur Mac OS X 10.1.2 rend l’utilisation de XML-RPC et de SOAP plus facile.

Call xmlrpc

A partir de Mac OS X 10.1, les scripteurs peuvent utiliser la commande “call xmlrpc“. Vous commencez par cibler un serveur XML-RPC par un bloc AppleScript “tell“. Le script suivant demande la date et l’heure à un serveur XML-RPC à l’adresse “http://time.xmlrpc.com/RPC2“. Ce n’est qu’un simple exemple, il ya de nombreux autres types de données accessibles sur des serveurs SOAP et XML-RPC. La commande “call xmlrpc” requiert un nom de méthode (comme dans “currentTime.getCurrentTime“). Vous devez inclure les paramètres requis par la méthode (voir l’exemple “call soap“). Le script prend la valeur retournée et la transforme en une date AppleScript. Le code ajoute aussi trois heures à la valeur pour la mettre en ligne avec la zone horaire de la côte Est des USA.

tell application "http://time.xmlrpc.com/RPC2"

set returnValue to call xmlrpc ¬
	{method name:"currentTime.getCurrentTime"}
set theDate to (returnValue as date) + (3 * hours)

end tell

Les sites Web qui fournissent des services Web expliqueront en général quel nom de méthode et quels paramètres utiliser (voir “http://www.xmlrpc.com/currentTime” pour de plus amples détails sur le script donné en exemple). Que vous aimiez ou pas, le système Mac OS X prend en compte le XML pour votre plus grand plaisir. L’AppleScripter n’a pas à s’occuper de l’analyse (parsing) ou de la traduction des valeurs XML retournées.

Call soap

La commande AppleScript pour accéder à des serveurs SOAP est, de manière prévisible, “call soap“. SOAP est un protocole plus complexe que XML-RPC, en partie parce que SOAP vous permet d’échanger des types de données plus complexes. La syntaxe AppleScript est un peu plus longue pour des appels SOAP. Avec la syntaxe de “call soap“, vous devez fournir des valeurs pour le nom de la méthode, la “method namespace URI”, les paramètres de la méthode et le “SOAPAction”. Des sites tels que XMethods (où j’ai trouvé ces informations de serveur SOAP) explique en général quelles valeurs par défaut à utiliser pour ces différents pramaètres. Vous pourriez probablement les deviner !

Ce script récupère le cours d’une valeur mobilière (en temps réel, si le marché est ouvert) exprimé dans une devise particulière en fournissant comme paramètres le symbole de la valeur et le nom du pays. Dans ce cas, nous utilisons la valeur Sun Microsystems avec un cours en dollars US. La partie “on getStockPrice(sym, _country)” est un gestionnaire AppleScript qui prend comme argument un symbole de valeur et un nom de pays, et qui utilise la commande “call soap” pour renvoyer le cours de la valeur. Les gestionnaires AppleScript, ou sous-routines, sont décrits dans le chapitre 8 (”Subroutines”) du livre AppleScript in a Nutshell.

set sym to "SUNW"
set _country to "United States"

getStockPrice(sym, _country)

on getStockPrice(Symbol, theCountry)
	try
	    with timeout of 30 seconds
	        tell application "http://soaptest.activestate.com:8080/PerlEx/soap.plex"

			return (call soap ¬
   			{method name:"StockQuoteInCountry", ¬
   			method namespace uri:"http://activestate.com/",¬
			parameters:{Symbol:Symbol as string, country:theCountry as string},¬
  			SOAPAction:"urn:activestate"} )

			end tell
		end timeout
	on error errmesg
		display dialog errmesg
	end try
end getStockPrice

Le gestionnaire “getStockPrice” comprend un bloc AppleScript “try“, qui peut capturer et éventuellement traiter toute erreur pouvant survenir dans les instructions comprises dans le bloc “try … end try“. En termes d’appels SOAP ou XML-RPC, la réponse peut être plus ou moins longue en fonction de l’activité du réseau, et cela peut causer un “time out” (décrochage). Sans utiliser l’instruction de détection d’erreur de “try“, le script pourrait s’effrondrer grossièrement. Le script utilise aussi l’instruction “with timeout” pour limiter à 30 secondes la période durant laquelle il attendra la réponse à sa requête SOAP.

Les services Web constituent un développement important dans le monde des logiciels. C’est vraiment très excitant de constater qu’il y a une parfaite intégration entre AppleScript et ces services.

Lancez-vous

Nous venons juste d’effleurer la surface de l’étendue des possibilités qu’offre AppleScript sur Mac OS X aux utilisateurs et aux développeurs. Un sujet plausible pour de futures articles pourraient provenir de nombre d’applications majeures qui offrent le support du scripting avec AppleScript.


Textes originaux en anglais sur O’Reilly : http://www.macdevcenter.com/pub/ct/47

Thierry Les langages de scripting , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
S'abonner aux commentaires de cet article