sábado, 21 de abril de 2012

Introducción a Google Apps Script.


Desarrollo sobre la plataforma Google Apps:


Hola a todos, les voy a hablar un rato sobre Google Apps Script, esta va a ser una simple introducción o mas bien demostración, sobre la enorme gama de posibilidades que posee esta enorme herramienta. Ya que en un principio nos resulta difícil darnos cuenta de la magnitud que posee, la mejor manera de ver esto; es probándolo, que es lo que me ocurrió a mi. Una vez que realizaste el primer script, te diste cuenta lo sencillo que resulto, el tiempo y comodidad que te dio a cambio, la verdad que es un poco difícil dejar de utilizarlo.


Que es?

Google Apps Script es un lenguaje de scripting basado en  la nube que ofrece maneras fáciles de automatizar las tareas a través de productos de Google y servicios de terceros. No es nueva, ya que hace del 2009 que se libero y  esta herramienta ya esta muy madura .

Ventaja:

Basado en JavaScript, sintaxis muy similar y fácil de aprender.

Bajo el capó, Google Apps Script utiliza el Google Web Toolkit (GWT) para crear y mostrar los elementos de la interfaz de usuario. Google Web Toolkit es fácil de aprender, y completamente abstrae la complejidad de AJAX / HTML.

Basado en la nube, tenemos las herramientas de desarrollo como el debbuguer en el propio navegador web, todo de manera online.
Puede ser utilizado para crear herramientas sencillas para el consumo interno de una organización, realizar tareas simples de administración del sistema, así como tareas mas complejas, pero de forma muy sencilla.

Con Google Apps de Script se puede por ejemplo:
- Automatizar los procesos repetitivos y flujos de trabajo.
- Crea scripts para automatizar las aprobaciones de gastos, gestión de la compra de entradas de pedidos, etc.
- Enlace productos de Google con los servicios de terceros. Un script puede enviar correos electrónicos personalizados y una invitación a una lista de calendario a partir de una base de datos MySQL.
- Crear funciones personalizadas de hoja de cálculo. Aplicar el formato personalizado o realizar análisis complejos de datos en hojas de cálculo de Google Docs.
- Construir ricas interfaces gráficas de usuario y los menús. Por ejemplo: una compañía podría dar energía a una aplicación interna para la compra de suministros de oficina, donde los usuarios pueden comprar a través de una interfaz de menú personalizado.
- Integración con todos los productos de Google como por ejemplo: Integrar con los albunes de Picasa Web, publicar de manera automática los eventos de Google Calendar en nuestro sitio web. Podemos incrustar nuestro App Script en nuestro Google Site, mediante Apps Script Gadget.


Gran ventaja de como esta licenciado:


- Licenciado bajo CCA 3.0 y Apache 2.0.
- Por ese motivo "casi todo", es de uso libre y gratuito. Esta exepción se debe a que en algunos casos, una página puede incluir contenido, como una imagen, que no está cubierto por la licencia. Así que Con excepción de lo señalado , el contenido de esta página está licenciado bajo la Creative Commons Attribution 3.0 License , y ejemplos de código están registrados bajo la licencia Apache 2.0 .

Para que esto no se paresa a una simple propaganda, creo que la mejor manera de tratar de demostrar lo que digo, es dando un par de ejemplo, sobre algunas de las cosas mas sencillas que podemos automatizar.


Primer Ejemplo:


Primero lo que debemos hacer por supuesto es tener una cuenta de Gmail, para acceder a Google Docs por supuesto jeje. Dentro de Google Docs una de las utilidades que tenemos, ademas de los archivos de texto y hojas de calculo, son los formularios, estos resulta de bastante utilidad a la hora de organizar reuniones (como estas) o recaudar por ejemplo información de un grupo de personas. Simplemente debemos crear un Formulario:



Donde podemos poner la cantidad de campos que necesitemos, pudiendo también especificar si alguno es obligatorio u opcional, agregar algún texto para explicar el objetivo del formulario. Compartirlo a nuestros contactos, o también enviar el formulario a las redes sociales o web que queramos. Y al rellenar el formulario, los datos se irán acumulando en una hoja de calculo asociada al mismo.
Ahora bien, se preguntaran donde ingresarían o para que los scripts, pues supongamos que no deseamos estar revisando cada tanto si alguien relleno o no el formulario, pues con el siguiente script obtendremos la solución de una manera muy sencilla. Y además ni siquiera necesitaremos desarrollar el script por completo. Para eso necesitaremos ingresar a la hoja de calculo asociada al formulario, vamos a Herramientas - Galería de secuencia de comandos (galería de scripts ;)).



Y para el siguiente ejemplo vamos a buscar Contact Us, (comentario, como verán, ya existe una gran cantidad de scripts, y además nosotros podremos compartir los que queramos). Una vez elegido el script le damos a install, le damos los permisos necesarios, y ahora tenemos que ingresar al editor de scripts ( o secuencia de comandos) donde podremos ver y editar el scripts que instalamos, o podremos escribir uno propio.
En este caso, simplemente con editar, la dirección de correo donde queremos que lleguen las actualizaciones de cada vez que alguien rellena el formulario, y personalizar las siguientes frases.



Ahora guardamos el script, y debemos activarlos, para eso vamos a la opción, activadores:



Y le damos click a Here to add one now, y modificamos la ultima opción para que nos notifique cada vez que alguien llena y envía el formulario. Ahora lo que debemos hacer el guardar la autorización y darles los permisos que nos pide.



Ahora podemos hacer unas pruebas ;) enviamos el formulario.



Supongamos que alguien lo rellena y lo envía. Y como pueden observar, acaba de llegar la notificación, de que un formulario se ah rellenado.




Segundo Ejemplo:

Este segundo ejemplo puede llegar a ir de la mano del primero, ya que en el primero deberíamos haber conseguido una gran lista de mail en la hoja de calculo, pues con el siguiente ejemplo vamos a poder enviar mail desde la misma lista ;)
Para ello lo que vamos a hacer, es ir a nuestro Google Docs, y esta vez crear una hoja de calculo, y en la primera linea vamos a ir agregando los campos que creamos necesarios, por ejemplo: nombre, apellido, mail, dirección, etc, etc.



Y agregamos los datos (aclaro que tranquilamente se puede utilizar la hoja de calculo con los datos que tiene la que ya creamos con el formulario ;) ) Ahora tenemos dos opciones, que son las que les pasare a mostrar, una y la mas sencilla es utilizar algún script ya creado por otra persona. Para ello vamos a herramientas, galería de scripts, y en este caso vamos a buscar FormEmailer, le damos install, y debemos autorizarlo, como hicimos con el otro script.

Ahora como podemos observar, tenemos una nueva opción en el menú llamada FormEmailer, ahora lo abrimos y le damos install, una vez realizado esto, nos creara otra hoja de calculo y como se puede ver, en nuestra hoja, se habrá añadido una nueva columna. 

Ahora, yendo nuevamente al menú FormEmailer, y dándole click a setting nos saldrá nueva ventana, donde podemos configurar el sujeto del mail, el mensaje, y varios datos mas. Si vamos a nuevamente a su menú, elegimos process manually, le podemos decir a la persona que queremos enviarle el mail con solo pasarle la fila, y además en nuestra hoja de calculo, quedara asentado a quienes ya se les mando el mail.

Otra opción seria por ejemplo decir el numero de fila seguido de un *, eso hará que se les envié un mail desde la fila que seleccionamos, hasta el final de la lista.


Pasemos a lo interesante : veamos código.

Ejemplo bien simple para enviar un mail:

function sendEmail(){
MailApp.sendEmail('rosario-gtug@googlegroups.com', '¡Hola!', 'Este mensaje se ha enviado desde Google Apps Script; ¿no es maravilloso?');
}

Como verán, con la API de Google, utilizando MAilApp.sendEmail(); simplemente hay que pasarle como parámetros el mail a quien va dirigido, el asunto del mismo, y el texto que se corresponde al mensaje. Con esta simple función, ya estaríamos mandado un mail con solo llamar a la función ;) Ahora vamos a verlo desde una hoja de calculo.

Sending emails from a Spreadsheet


Para no extendernos demasiado vamos a dar un ejemplo corto, donde simplemente enviaremos unos mail a partir de una hoja de calculo, y analizaremos el código utilizado, y veremos lo sencillo de entender que nos resultara la sintaxis.

Código:

var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Primera linea de información a procesar
var numRows = 2; // Segunda linea de información a procesar
// El rando de celdas será A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 3)
// Se vera los valores de cada linea del rango
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; // Primer columna
var message = row[1]; // Segunda columna
var emailSent = row[2]; // Tercer Columna
if (emailSent != EMAIL_SENT) { // Acá prevenimos el no reenvío de mails
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
// Nos aseguramos de que la celda fue actualizada, sino interrumpimos el envió
SpreadsheetApp.flush();
}
}
}

Analisis:

Como verán, una e imagino que ya se abran dado cuenta, a esta herramienta, lo que realmente la hace poderosa es la capacidad que tiene la comunidad para compartir código, y además darnos la posibilidad de mejorarlo o adaptarlo hacia nuestras necesidad, con las facilidades que nos brindan desde la pagina oficial con una excelente documentación de toda la API :

Además de darnos una gran cantidad de ejemplos:

Y de poseer un sistema muy simple para poder publicar nuestros script para ayudar a que siga creciendo la comunidad y facilitar mas todavía las tareas de automatización.
Esto es todo por ahora sobre esta herramienta, al que asistió a la presentación del Lanzamiento Gtug Argentina, podrá recordar gran parte de estas palabras, así que en los próximos que hable sobre el tema, vamos a profundizar mas en su funcionamiento. Espero que les allá gustado, hasta la próxima.

Saludos a todos, Gabriel E. Pozo