Usługa treści

Po opublikowaniu skryptu jako aplikacji internetowej funkcje specjalne wywołania zwrotnego doGet() i doPost() są wywoływane za każdym razem, gdy żądanie jest wysyłane do adresu URL skryptu. Zamiast zwracać obiekt interfejsu utworzony za pomocą usługi HTML, można użyć usługi treści do zwracania nieprzetworzonej treści tekstowej. Dzięki temu możesz tworzyć skrypty działające jako &&tt;services" w odpowiedzi na żądania GET i POST oraz dane dotyczące różnych typów MIME.

Podstawy

Oto prosty przykład usługi dotyczącej treści:

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

Wdróż skrypt jako aplikację internetową, wykonując te same czynności co w przypadku wyświetlania interfejsu. Gdy żądanie GET zostanie wysłane do adresu URL skryptu, zostanie zwrócony tekst Hello, world!. Oprócz zwykłego tekstu usługa obsługuje także zwracanie treści ATOM, CSV, iCal, JavaScript, JSON, RSS, vCard i XML.

Wyświetlanie kanałów RSS

Użyjmy nieco bardziej skomplikowanej funkcji, np. filtrowania kanału RSS. Komiksy XKCD są zawsze zabawne, ale nie możesz przeczytać ich całego, chyba że najedziesz kursorem na komiks, aby zobaczyć dodatkowy tekst alternatywny. Nie można najechać na nią kursorem, więc to nie działa.

Załóżmy, że chcemy edytować kanał w taki sposób, aby dodatkowy moduł był bezpośrednio w nim widoczny, a nie najeżdżaliśmy na niego kursorem. Działa to dobrze na urządzeniu mobilnym. Oto kod:

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

To może wydawać się trudne, ale dzieli się na proste elementy. Do pobierania oryginalnego kanału RSS XKCD używamy usługi pobierania adresów URL. Następnie używamy standardowego wyrażenia regularnego JavaScript, aby zastąpić odpowiednie elementy. Na koniec pakujemy edytowany kanał w obiekcie Textoutput i ustawiamy typ MIME na RSS.

Aby zobaczyć, jak działa, opublikuj skrypt jako aplikację internetową. Pamiętaj, że musisz zezwolić na anonimowy dostęp (ponieważ czytnik RSS będzie anonimowy). Następnie dodaj adres URL usługi (nie oryginalny kanał RSS) do swojego czytnika RSS lub otwórz go bezpośrednio w przeglądarce. Dobrze.

Wyświetlanie kodu JSON z skryptów

Co jeszcze mogę zrobić z usługą treści? Spróbuj udostępnić JSON w innych skryptach lub innych witrynach i usługach. Oto prosty skrypt implementujący usługę, dzięki której każdy może sprawdzić, czy dany kalendarz jest otwarty o określonej godzinie.

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

Tak jak wcześniej opublikuj tę aplikację jako anonimową aplikację internetową, aby zaczęła działać. W takiej sytuacji użytkownicy nowej usługi mogą korzystać z niej, dodając parametry URL na końcu adresu URL usługi. Parametry start i end umożliwiają określenie zakresu czasu określonego w standardowej epoce systemu Unix.

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

Usługa zwróci kod JSON, który informuje, czy w kalendarzu znajduje się coś w tym zakresie.

{"available":true}

Wyświetlanie formatu JSONP na stronach internetowych

Po niewielkiej zmianie usługa JSON może zostać przekształcona w JSONP, co oznacza, że może być wywoływana z JavaScriptu w przeglądarce. Oto nowy skrypt:

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

Aby wywołać tę usługę w przeglądarce, utwórz tag skryptu, którego atrybut src to adres URL Twojej usługi z dodatkowym parametrem o nazwie prefix. Jest to nazwa funkcji w kodzie JavaScript po stronie klienta, która zostanie wywołana z wartością zwracaną przez usługę.

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

Ten przykład pokazuje pole w przeglądarce z danymi wyjściowymi usługi, ponieważ jako prefiks podajemy funkcję przeglądarki alert(). Zwrócony kod JavaScript będzie wyglądać tak:

alert({"available":true})

Przekierowania

Ze względów bezpieczeństwa treść zwrócona przez usługę treści nie jest wyświetlana z adresu script.google.com, ale zamiast tego zostanie przekierowany do jednorazowego adresu URL na adres script.googleusercontent.com. Oznacza to, że jeśli korzystasz z usługi Content do zwrotu danych do innej aplikacji, musisz skonfigurować klienta HTTP w taki sposób, aby śledził przekierowania. Na przykład w narzędziu wiersza poleceń cURL dodaj flagę -L. Więcej informacji o włączaniu tego działania znajdziesz w dokumentacji klienta HTTP.