Servicio de contenido

que devuelven contenido textual sin procesar de varios tipos de MIME.

Cuando se publica una secuencia de comandos como una app web, las funciones de devolución de llamada doGet y doPost se ejecutan cada vez que se realiza una solicitud a la URL de la secuencia de comandos. En lugar de devolver un objeto de interfaz de usuario creado con el servicio HTML, el servicio de contenido puede devolver contenido textual sin procesar. Escribe secuencias de comandos que actúen como servicios, respondan a solicitudes GET y POST, y publiquen datos de varios tipos de MIME.

Conceptos básicos

En el siguiente ejemplo, se muestra cómo usar el servicio de Content:

function doGet() {
  return ContentService.createTextOutput('Hello, world!');
}

Implementa la secuencia de comandos como una aplicación web siguiendo los mismos pasos que para publicar una interfaz de usuario. Cuando se realiza una solicitud GET a la URL de la secuencia de comandos, se devuelve el texto Hello, world!. Además de texto sin formato, el servicio admite la devolución de contenido en formato ATOM, CSV, iCal, JavaScript, JSON, RSS, vCard y XML.

Publica feeds RSS

Filtrar un feed RSS para modificar su contenido Por ejemplo, edita un feed de XKCD para incluir texto alternativo directamente en el feed y mejorar la visualización en dispositivos móviles.

function doGet() {
  var feed = UrlFetchApp.fetch('http://xkcd.com/rss.xml').getContentText();
  feed = feed.replace(
    /(<img.*?alt="(.*?)".*?>)/g,
    '$1' + new Array(10).join('<br />') + '$2');
  return ContentService.createTextOutput(feed)
    .setMimeType(ContentService.MimeType.RSS);
}

El código consta de los siguientes componentes. Usa el servicio de recuperación de URL para recuperar el feed RSS original de XKCD. Usa una expresión regular estándar de JavaScript para realizar las sustituciones. Encapsula el feed editado en un objeto TextOutput y configura el tipo de MIME en RSS.

Para ver esto en acción, publica la secuencia de comandos como una app web y permite el acceso anónimo. Agrega la URL del servicio a tu lector de RSS o visítala directamente en un navegador web.

Cómo publicar JSON desde secuencias de comandos

Usa el servicio de Content para entregar JSON a otras secuencias de comandos, sitios web y servicios. La siguiente secuencia de comandos implementa un servicio que verifica si una ranura del calendario está abierta en un momento específico.

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}

Publica esto como una app web anónima. Los usuarios pueden agregar parámetros de URL al final de la URL del servicio. Los parámetros start y end especifican un intervalo de tiempo en el ciclo de entrenamiento estándar de Unix.

curl -L URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000

El servicio devuelve JSON que informa si el calendario está abierto en ese rango.

{"available":true}

Cómo entregar JSONP en páginas web

Con un pequeño cambio, tu servicio JSON puede convertirse en JSONP para que se lo llame desde JavaScript en un navegador.

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(
    request.parameters.prefix + '(' + JSON.stringify(result) + ')')
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
}

Para llamar a este servicio desde un navegador, crea una etiqueta de secuencia de comandos con un atributo src establecido en la URL del servicio y un parámetro prefix adicional. Es el nombre de la función en tu JavaScript del cliente que se llama con el valor que devuelve el servicio.

<script src="URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000&prefix=alert"></script>

En este ejemplo, se muestra un cuadro de mensaje en el navegador con el resultado del servicio, usando la función alert integrada del navegador como prefijo. El código JavaScript que se devuelve se ve de la siguiente manera:

alert({"available":true})

Ten cuidado cuando uses JSONP. Como cualquier persona puede incorporar la etiqueta de secuencia de comandos en su página web, se te puede engañar para que ejecutes la secuencia de comandos cuando visites un sitio web malicioso, que luego puede capturar los datos devueltos. Asegúrate de que las secuencias de comandos JSONP sean de solo lectura y solo devuelvan información no sensible.

Redireccionamientos

Por motivos de seguridad, el contenido que devuelve el servicio de Content se redirecciona a una URL de un solo uso en script.googleusercontent.com. Si usas el servicio de Content para devolver datos a otra aplicación, asegúrate de que el cliente HTTP esté configurado para seguir redireccionamientos. Para la utilidad de línea de comandos curl, agrega la marca -L. Consulta la documentación de tu cliente HTTP para obtener más información.