Serviço de conteúdo

Quando um script é publicado como um app da Web, as funções de callback especiais doGet() e doPost() são invocados sempre que uma solicitação é feita ao URL. Em vez de retornar um objeto da interface do usuário criado com o serviço HTML, os O serviço de conteúdo pode ser usado para retornar dados brutos o conteúdo textual. Isso permite que você escreva scripts que atuam como "serviços", respondendo a solicitações GET e POST e disponibilizando dados de vários tipos MIME.

Noções básicas

Veja um exemplo simples do serviço de conteúdo:

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

Implantar o script como um app da Web seguindo as mesmas etapas que você faria se estivesse exibindo uma interface do usuário. Quando uma solicitação GET for feita ao URL do script, o texto Hello, world! será retornados. Além do texto simples, o serviço também suporta o retorno de ATOM, Conteúdo CSV, iCal, JavaScript, JSON, RSS, vCard e XML.

Veiculação de feeds RSS

Vamos tentar algo um pouco mais complicado, como filtrar um feed RSS. A As histórias em quadrinhos da XKCD são sempre engraçadas, mas é impossível pegar todo mundo a menos que você passe o mouse sobre a história em quadrinhos para ver o texto alternativo extra. Não é possível passar o cursor no navegador para dispositivos móveis, então isso não funciona.

Digamos que queiramos editar o feed para que a conclusão extra fique no feed e, em vez de passar o cursor, você rolava um pouco para baixo para ver. Isso funcionaria bem em um dispositivo móvel. O código fica assim:

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

Isso pode parecer complicado, mas é dividido em partes simples. Usamos o Serviço de busca de URL para buscar o original feed RSS XKCD. Em seguida, usamos uma expressão regular JavaScript padrão para tornar de substituições de que precisamos. Por fim, unimos o feed editado a um objeto TextOutput e defina o código MIME digitar para RSS.

Para ver isso em ação, publique o script como um app da Web, permitindo acesso anônimo, já que seu leitor de RSS vai acessá-lo como um usuário anônimo usuário). Em seguida, adicione o URL do serviço (não o feed RSS original) ao seu feed RSS leitor de tela ou simplesmente acessá-lo diretamente em um navegador da web. Pronto!

Como exibir JSON a partir de scripts

O que mais podemos fazer com o serviço de Conteúdo? E se exibir JSON para outros scripts ou outros sites e serviços. Aqui está um script simples que implementa uma que qualquer pessoa pode usar para ver se um horário está disponível em determinada data tempo de resposta.

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, publique-o como um app da Web anônimo para que ele funcione. Nesse caso, os usuários do novo serviço podem usá-lo adicionando parâmetros de URL ao final da chamada URL do serviço. Os parâmetros start e end fornecem um período para verificação. especificado na época padrão do Unix.

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

O serviço retornará um JSON que informa se há algo em seu agenda nesse intervalo.

{"available":true}

Como exibir JSONP em páginas da Web

Com uma pequena mudança, o serviço JSON pode ficar JSONP, que significa que pode ser chamado de JavaScript em um navegador. Veja o novo script:

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 chamar esse serviço em um navegador, crie uma tag de script com o atributo src é o URL do seu serviço, com um parâmetro adicional chamado prefix. Isso é o nome da função no JavaScript do lado do cliente que será chamada pelo valor retornado pelo serviço.

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

Este exemplo mostra uma caixa de mensagem no navegador com a saída do serviço, já que especificamos a função alert() integrada do navegador como prefixo. A O código JavaScript retornado será semelhante a este:

alert({"available":true})

Redirecionamentos

Por motivos de segurança, o conteúdo retornado pelo serviço de conteúdo não é veiculado de script.google.com, mas redirecionado para um URL único em script.googleusercontent.com. Isso significa que, se você usa o serviço de Conteúdo para retornar dados a outro aplicativo, é necessário garantir que o cliente HTTP configurados para seguir redirecionamentos. Por exemplo, no utilitário de linha de comando cURL, adicione a sinalização -L. Consulte a documentação do seu cliente HTTP para saber mais informações sobre como ativar esse comportamento.