Servicio de contenido

Cuando se publica una secuencia de comandos como una aplicación web, las funciones especiales de devolución de llamada doGet() y doPost() se invocan cada vez que se realiza una solicitud al parámetro de configuración URL. En lugar de mostrar un objeto de interfaz de usuario creado con el servicio HTML, el Puedes usar el servicio de contenido para mostrar del contenido textual. Esto le permite escribir secuencias de comandos que actúan como “servicios”, responder a solicitudes GET y POST, y entregar datos de varios tipos de MIME.

Conceptos básicos

Este es un ejemplo simple del servicio de contenido:

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

Implementar la secuencia de comandos como una aplicación web, siguiendo los mismos pasos que si estuvieras entregando una interfaz de usuario. Cuándo se hace una solicitud GET a la URL de la secuencia de comandos, el texto Hello, world! se mostrará que se devuelven. Además del texto sin formato, el servicio también admite devolver ATOM, Contenido CSV, iCal, JavaScript, JSON, RSS, vCard y XML.

Entrega de feeds RSS

Probemos con algo un poco más complicado, como filtrar un feed RSS. El Los cómics de XKCD siempre son divertidos, pero no puedes leerlos completos a menos que coloques el cursor sobre la tira cómica para ver el texto alternativo adicional. Lamentablemente, no puedes colocar el cursor sobre un navegador para dispositivos móviles, por lo que no funciona.

Supongamos que queremos editar el feed para que el remate adicional se encuentre en él. y, en lugar de colocar el cursor, te desplazas un poco hacia abajo para verlo. Que funcionaría bien en un dispositivo móvil. Este es el código:

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);
}

Puede parecer difícil, pero se divide en partes simples. Usamos la Servicio de recuperación de URL para recuperar el original Feed RSS de XKCD Luego, usamos una expresión regular de JavaScript estándar para que la sustituciones que necesitamos. Por último, unimos el feed editado TextOutput y establece el MIME escribe a RSS.

Para ver esto en acción, publica la secuencia de comandos como una aplicación web y asegúrate de permitir acceso anónimo (dado que el lector RSS lo visitará como un usuario). Luego, agrega la URL del servicio (no el feed RSS original) a tu RSS. o simplemente puedes visitarlo directamente en un navegador web. Eso es todo.

Cómo entregar JSON desde secuencias de comandos

¿Qué más podemos hacer con el servicio de contenido? ¿Y si entregamos JSON a otros secuencias de comandos u otros sitios web y servicios. Aquí hay una simple secuencia de comandos que implementa servicio que cualquiera puede usar para ver si un horario disponible del calendario está abierto en un tiempo.

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);
}

Como antes, publícala como una app web anónima para que funcione. En este caso, usuarios de tu nuevo servicio pueden usarlo agregando parámetros de URL al final del URL del servicio. Los parámetros start y end proporcionan un intervalo de tiempo para verificar. especificadas en el ciclo de entrenamiento estándar de Unix.

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

El servicio devolverá JSON que informa si hay algo en tu calendario en ese rango.

{"available":true}

Entrega JSONP en páginas web

Con un pequeño cambio, tu servicio JSON puede volverse JSONP, lo que significa que se puede llamar de JavaScript en un navegador. Esta es la nueva secuencia de comandos:

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 cuyo atributo src es la URL de tu servicio, con un parámetro adicional llamado prefix. Esta es el nombre de la función en el JavaScript del cliente a la que se llamará con el valor que muestra el servicio.

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

En este ejemplo, se mostrará un cuadro de mensaje en el navegador con el resultado del servicio ya que especificamos la función alert() integrada del navegador como prefijo. El El código JavaScript devuelto se verá de la siguiente manera:

alert({"available":true})

Redireccionamientos

Por motivos de seguridad, el contenido que devuelve el servicio de contenido no se publica script.google.com, pero en su lugar se redireccionará a una URL única en script.googleusercontent.com Es decir, si usas el servicio de contenido para devolver los datos a otra aplicación, debes asegurarte de que el cliente HTTP que sigan los redireccionamientos. Por ejemplo, en 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 información sobre cómo habilitar este comportamiento.