La Guía Definitiva sobre AppleScript para Principiantes
() translation by (you can also view the original English article)
Este es el primer artículo de una nueva serie que revisa algunos de los artículos pasados favoritos de nuestros clientes que todavía contienen información increíble y relevante que podrías encontrar útil. Este artículo fue publicado originalmente el 7 de julio de 2009.
Lo mejor de AppleScript es que no tienes que ser un programador genial para usarlo. De hecho, no necesitas tener ninguna experiencia en programación. Este artículo te mostrará cómo escribir un AppleScript para prácticamente cualquier aplicación usando instrucciones sencillas que vienen ocultas en el interior de la estructura de cada aplicación. ¿Intrigado? ¡Sigue leyendo!
¿Qué es AppleScript?
AppleScript es un potente lenguaje que viene integrado en el sistema OS X. El uso principal de AppleScript es la automatización de tareas normalmente repetitivas y que consumen demasiado tiempo. Por ejemplo, yo como freelance, odio crear facturas cada semana para mis diferentes clientes. Para resolver este problema escribí un AppleScript que lee las horas que he registrado en iCal, crear una factura en Microsoft Excel basada es dichas horas y envía las facturas a mis clientes a través de email. ¡Y todo con un simple clic sobre un botón!



La Ventana Principal
Inicios: El Bloque Tell
Para crear un AppleScript, abre la aplicación "Editor de Scripts" ubicada en la carpeta AppleScript dentro de la carpeta Aplicaciones. Deberías ver una sencilla ventana que contiene un amplio campo de texto con una franja de botones en la parte superior. Dentro del campo de texto, escribe el siguiente código:
[applescript]
tell application "Finder"
display dialog "Hello World"
end tell
[/applescript]
AppleScript intenta usar texto plano en inglés siempre que es posible para conseguir que la creación del código sea extremadamente sencillo. La mayoría de los comandos en AppleScript están localizados dentro de "tell block". Es denominado "tell block" porque estás diciéndole, "telling" en inglés, a una aplicación lo que quieres que haga. Por ejemplo, el código de arriba le indica al Finder que muestre una ventana de diálogo conteniendo las palabras "Hello World". Cuando hayas acabado con un comando o una cadena de comandos para una aplicación concreta, cierras el bloque con "end tell".
Recuerda terminar siempre tus tell blocks adecuadamente de otra forma el código no será compilado.
Tras haber introducido el código anterior, pulsa sobre el icono "Compilar" que tiene forma de martillo. Si tu sintaxis es correcta, el código será formateado y coloreado automáticamente. Si has cometido algún error, el Editor de Scripts resaltará el área problemática y te proporcionará un mensaje sobre lo que cree que ha podido fallar. Aquí tienes una referencia rápida



Guía de Color
Después de que tu código haya sido compilado, pulsa el botón "Ejecutar". Deberías ver el siguiente diálogo:

Hola Mundo
Ahora pulsa el botón "OK" y observa la parte inferior de la ventana de tu Editor de Scripts. Cuando ejecutas un scripts, el Editor de Scripts te dice cuál fue el resultado, o qué fue "devuelto". En este caso te indica que el botón "OK" fue pulsado.



Respuesta OK
Declarar Variables
Las variables son esencialmente lo mismo en cualquier lenguaje de programación. Proporcionan una forma sencilla para acceder y manipular gran cantidad de información en un fragmento de código compacto. Crear o "declarara" variables es diferente en cada lenguaje. En AppleScript declaras las variables de la siguiente manera:
[applescript]
set theString to "Hello World"
tell application "Finder"
tell application "Finder"
end tell
[/applescript]
Existen varias cosas que debes advertir en el ejemplo anterior. Primero, nota que las variables están declaradas usando los comandos "set" y "to". Haciendo esto estableces el nombre de la variable, en este caso "theString", para igualar algo, en este caso el texto "Hello World". Muchos lenguajes de programación requieren que indiques el tipo de variable que deseas para la declaración (un entero, un punto flotante, texto, etc.). En cualquier caso AppleScript, es suficientemente inteligente como para trabajar con tus variables sin ninguna instrucción relativa al formato.
Observa también como he escrito el nombre de la variable. No puedes usar espacios dentro del nombre de la variable pero puedes usar mayúsculas para separar distinguir palabras (theString) o el método de los guiones bajos (the_string). No importa realmente que método elijas, simplemente asegúrate de que mantienes una consistencia en tu código. También sería buena idea que uses en todas tus variables nombres descriptivos. Cuando observas el código de otro programador, puede resultar molesto ver nombres de variables como "myVariable" que no proporcionan ninguna pista sobre lo que son o sobre el objetivo de su uso.
Por último, observa que ahora que hemos colocado el texto "Hello World" dentro de la variable, puedo invocarla nuevamente tantas veces desee a través de todo mi código. Después si más tarde decido cambiar el texto "Hello World" a "Good Morning Dave", sólo tengo que cambiar el texto en la línea en la que definí la variable.
Trabajar con Variables
Puedes hacer todo tipo de cosas locas con las variables, pero como esto pretende ser sólo una breve introducción a AppleScript, únicamente te mostraré unas pocas. Escribe el siguiente código:
[applescript]
--Integer Variables
set theFirstNumber to 3
set the theSecondNumber to 2
--Variable Operations
set theAnswer to (theFirstNumber + theSecondNumber)
set theAnswer to (theAnswer + 1)
--String Variables
set theString to "3+2+1="
--Display Dialog
tell application "Finder"
display dialog theString & theAnswer
end tell
[/applescript]
Puedes compilar tu código rápidamente presionando la tecla "enter" (no la tecla return). Está ubicada en la posición décima del teclado númerico en los ordenadores de sobremesa y junto a la tecla "Comando" de a la derecha de la barra de espacio en los portátiles.
Conforme tus scripts alcancen mayor complejidad, es necesario mantener una organización. Escribiendo dos guiones "--" antes de una línea de texto, podrás insertar un comentario. Emplea los comentarios para separar y describir tus secciones en el código y así navegar con mayor facilidad. En este ejemplo he creado una cadena de variables (sólo texto) y algunas variables compuestas por cifras. Observa que puedes realizar operaciones matemáticas con las variables. Aquí he establecido que "theFirstNumber" equivalga a tres y "theSecondNumber" a dos, después los he añadido a "theAnswer".
Observa también como puedes modificar la variable después de que haya sido declarada. Inmediatamente después de establecer "theAnswer" como la suma de "theFirstNumber" y "theSecondNumber" (dando como resultado, 5), he cambiado el valor de "theAnswer" sumandole uno (lo que da como resultado 6). Si ejecutas este script deberías ver el siguiente resultado:

Algunas Matemáticas Básicas
De nuevo, esto sólo araña la superficie del tipo de operaciones que puedes ejecutar con las variables. Por el momento deberías simplemente entender que las variables no son algo estático. La mayor parte del potencial detrás de cualquier lenguaje de programación reside en su capacidad de manipular las variables para ejecutar un amplio rango de tareas.
La Clave de Todo Esto: Diccionarios AppleScript
Aunque el propio AppleScript tiene un amplio rango de comandos que pueden aplicarse a cualquier programa o elemento en OS X, los desarrolladores de cada aplicación tienen la labor de añadir compatibilidad con AppleScript a sus aplicaciones. Esto significa que los desarrolladores deben escribir sencillos manuales para explicar cómo comunicarnos con sus aplicaciones a través de AppleScript. A estos manuales se les denomina "Diccionarios". Para ver un diccionario, dirígete a Archivo > Abrir Diccionario en el Editor de Scripts. Deslízate hacia la parte inferior de la lista de aplicaciones, haz clic sobre Mail y pulsa "Seleccionar". Deberías ver la siguiente ventana:



El diccionario de Mail
La columna de la izquierda contiene las "Suites" de comandos y elementos disponibles. Cuando pulsas sobre una suite, verás todo lo que ésta contiene expuesto en la parte de abajo. Puedes encoger esta previsualización pulsando la segunda columna, y después pulsa de nuevo sobre la tercera. Las Suites contienen comandos (una C dentro de un círculo) y clases (una C dentro de un cuadrado), clases que contienen propiedades (P) y elementos (E). Para entender cómo funciona todo esto, usemos un diccionario para crear un script.
Paso 1: Crear un Algoritmo para Nuestro Script
Primero necesitamos un algoritmo, lo cual es una forma elegante de decir que necesitamos escribir exactamente lo que nuestro script hará exactamente. Queremos crear un script para componer y enviar un email. Querremos usar variables para facilitar los cambios en el própio mensaje así como a quién se enviará el mensaje. Conforme escribimos nuestro algoritmo, necesitamos recordar la forma en que funciona AppleScript. Aquí están los pasos que he realizado:
- He creado variables para el destinatario, para la dirección del destinatario, para el asunto del email, y para el texto del cuerpo del email.
- He creado una variable que contiene nuestro nuevo mensaje junto con sus diversas propiedades
- He creado el nuevo mensaje
- Enviado el nuevo mensaje
Paso 2: Crear Algunas Variables
Ya sabemos como crear variables que contienen texto de forma que ni siquiera necesitemos el diccionario para el primer paso. Aquí tienes el código:
[applescript]
--Variables
set recipientName to "John Doe"
set recipientAddress to "nobody@nowhere.com"
set recipientAddress to "nobody@nowhere.com"
set theContent to "This email was created and sent using AppleScript!"
[/applescript]
Tal y como puedes ver, acabamos de colocar texto provisional en las variables para el nombre y la dirección de email del destinatario, así como el mensaje y el contenido de nuestro mensaje. Puedes cambiar esto por cualquier cosa que desees. Asegúrate de poner tu propia dirección de email en variable para la dirección del receptor de forma que puedas asegurarte recibiendo un email de que el script funciona adecuadamente.
Paso 3: Crea la Variable para el Mensaje con el Diccionario de Mail
Como no tenemos ni idea de como indicarle a Mail que cree un nuevo mensaje, tendremos que buscar en el diccionario de AppleScript. Si pulsas sobre "Standard Suite" verás varios comandos comunes que vienen en AppleScript. Sabiendo que queremos "crear" un nuevo mensaje, sencillamente nos deslizamos a través de las direcciones para encontrar algo equivalente. Comprobarás que no existe un comando "crear" pero a mitad de camino hacia abajo existe un comando "make". Suena perfecto, así que ahora sabemos como decirle a AppleScript que queremos "hacer" algo.
Después haz clic sobre el suite "Mail". Ya tenemos nuestro comando (make) así que deslízate hacia abajo pasando los comandos (verbs) hasta que veas las clases (nouns). La primera clase con la que nos tropezamos es "outgoing message", lo cual es estupendo ya que ¡es justamente lo que queremos! Ahora pulsa sobre la clase "outgoing message" y mira las propiedades disponibles de abajo.
Necesitamos conectar nuestras variables para el nombre del receptor, la dirección de correo electrónico del receptor, el asunto y los contenidos del mensaje. En la lista de propiedades no existe nada para el destinatario, pero hay propiedades para el asunto y el contenido. Sabemos como es la sintaxis correcta para hacer referencia a estas propiedades. Observa que el diccionario te proporciona el formato para definir las propiedades. Por ejemplo para el asunto, escribiremos la palabra "subject" seguido por dos puntos a los que les sigue asunto del mensaje.



Contenido del Asunto
En esta suite encontrarás un comando "send", que podemos usar para enviar el mensaje escribiendo sencillamente "send". Todavía necesitamos saber la sintaxis adecuada para el nombre y la dirección de email del destinatario. Como no está en esta suite, pulsa en la correspondiente a "Message". A mitad de camino hacia abajo en la lista de clases encontramos "recipient". Pulsa sobre la clase recipient y verás una vez más que podemos usar sencillamente el inglés para hacer referencia a las propiedades del destinatario. Así que sencillamente escribimos "nombre" y "address".
Puedes usar la función de búsqueda para localizar propiedades, clases, elementos y comandos rápidamente.
Ahora ya estamos preparados para crear la variable de nuestro mensaje usando la sintaxis que acabamos de aprender. Aquí tienes como se ve el código:
[applescript]
--Variables
set recipientName to "John Doe"
set recipientAddress to "nobody@nowhere.com"
set theSubject to "AppleScript Automated Email"
set theContent to "This email was created and sent using AppleScript!"
--Mail Tell Block
tell application "Mail"
--Create the message
set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:true}
end tell
[/applescript]
Observa que hemos creado un bloque tell para encerrar todos los comandos de la aplicación Mail. Después establezco una variable (theMessage) para "hacer" un nuevo "outgoing message" con las propiedades debatidas anteriormente. Advierte también que los grupos de propiedades están siempre contenidas entre corchetes { }.
Paso 4: Establece el Destinatario y Envía el Mensage
Ahora que ya hemos creado la variable para nuestro mensaje, necesitamos invocar dicha variable y crear un nuevo mensaje con las propiedades de theMessage. También necesitamos indicar los receptores y enviar el mensaje. Para conseguirlo, usaremos un bloque tell en nuestra variable. Aquí tienes nuestro script terminado.
[applescript]
--Variables
set recipientName to "John Doe"
set recipientAddress to "nobody@nowhere.com"
set theSubject to "AppleScript Automated Email"
set theContent to "This email was created and sent using AppleScript!"
--Mail Tell Block
tell application "Mail"
--Create the message
set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:true}
--Set a recipient
tell theMessage
make new to recipient with properties {name:recipientName, address:recipientAddress}
--Send the Message
send
end tell
end tell
[/applescript]
Primero, hemos creado una nueva copia de theMessage (el cual hereda todas las propiedades que hemos puesto en éste) y lo configuramos como "to recipient with properties". Esto le indica a Mail que queremos añadir un destinatario con las siguientes propiedades. Aquí simplemente hemos usado la sintaxis que aprendimos antes y las variables para el nombre y la dirección del destinatario.
Finalmente, invocamos el comando "send" para enviar nuestro mensaje. Advierte que esta vez tenemos dos bloques tell de cierre. Una vez hayas compilado tu código y corregido cualquier error pulsa "Ejecutar". Mail debería crear y enviar automáticamente el mensaje. ¡Tadaah! Comprueba tu carpeta de envios para asegurarte de que todo ha funcionado bien.



Mensaje Mail
¡Felicidades, has creado tu primer AppleScript! Puedes guardarlo como un simple script al que podrás volver y editar o usarlo como una aplicación que se ejecuta automáticamente cuando la abres.
Conclusión: Continúa Aprendiendo
Espero que esta guía para principiantes te haga pensar sobre todos los tipos de procesos y tareas que te gustaría automatizar. La sintaxis que te he mostrado junto con los Diccionarios AppleScript te pueden llevar muy lejos. No obstante, si estás realmente interesado en implementar AppleScript de múltiples útiles formas, deberías leer más. Apple proporciona un montón de información sobre AppleScript en su sitio web. Aquí tienes un buen sitio en el que empezar.
Otro sitio web en el que he seleccionado bastantes cosas es T&B. Ofrece algunas explicaciones en profundidad y tutoriales para que practiques (un poco anticuado, pero gratuito). ¡Tus comentarios son bienvenidos y nos harán saber si el tutorial te ha sido útil! ¿Qué otros consejos sobre AppleScript te gustaría que abordásemos en el futuro?