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.