Usługa treści

Gdy skrypt jest publikowany jako aplikacja internetowa, specjalne funkcje wywołania zwrotnego Funkcje doGet()i doPost() są wywoływane po każdorazowym wysłaniu żądania do skryptu Adres URL. Zamiast zwracać obiekt interfejsu utworzony za pomocą usługa HTML, Usługa treści może służyć do zwracania nieprzetworzonych danych treści tekstowe. Dzięki temu możesz pisać skrypty działające jako „usługi”, odpowiada na żądania GET i POST oraz wyświetla dane różnych typów MIME.

Podstawy

Oto prosty przykład usługi treści:

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

Wdróż skrypt jako aplikację internetową, wykonując te same czynności, co w przypadku korzystania z interfejsu. Kiedy wysłane żądanie GET do adresu URL skryptu, tekst Hello, world! zostanie . Oprócz zwykłego tekstu usługa obsługuje również zwracanie wartości ATOM, Zawartość CSV, iCal, JavaScript, JSON, RSS, vCard i XML.

Udostępnianie kanałów RSS

Spróbujmy czegoś bardziej skomplikowanego, na przykład filtrowania kanału RSS. Komiksy XKCD są zawsze zabawne, ale nie da się ich w pełni to tylko żart, chyba że najedziesz kursorem na komiks, aby zobaczyć dodatkowy tekst alternatywny. Nie można najechać kursorem na przeglądarkę mobilną, więc ta funkcja nie działa.

Załóżmy, że chcemy wprowadzić zmiany w pliku danych, aby dodać do niego dodatkowy przedział czasu. bezpośrednio, a zamiast najechać kursorem, przewiń stronę w dół, aby ją zobaczyć. Ten na urządzeniach mobilnych. 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);
}

Może się to wydawać skomplikowane, ale dzieli się na proste elementy. Wykorzystujemy Usługa pobierania adresów URL, aby pobrać oryginał. Kanał RSS XKCD. Następnie używamy standardowego wyrażenia regularnego JavaScriptu, by utworzyć zamienniki, których potrzebujemy. Na koniec umieszczamy edytowany plik danych obiektu TextOutput i ustawić MIME. z kanału RSS.

Aby zobaczyć, jak to działa, opublikuj skrypt jako aplikację internetową, zezwalając na dostęp anonimowy (ponieważ czytnik RSS będzie odwiedzać go jako anonimowy użytkownik, użytkownika). Następnie dodaj adres URL usługi (nie pierwotnego kanału RSS) do kanału RSS. lub po prostu otworzyć go bezpośrednio w przeglądarce. Znakomicie.

Udostępnianie kodu JSON ze skryptów

Co jeszcze można zrobić w usłudze Treści? A co z udostępnianiem kodu JSON innym skrypty lub inne witryny bądź usługi! Oto prosty skrypt, który implementuje usługa, za pomocą której każdy może sprawdzić, czy dany termin w kalendarzu jest wolny obecnie się znajdujesz.

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 dotychczas, opublikuj tę aplikację jako anonimową aplikację internetową, aby zacząć działać. W tym przypadku użytkownicy nowej usługi mogą z niej korzystać, dodając parametry adresu URL na końcu parametru adresu URL usługi. Parametry start i end określają zakres czasowy, w którym należy sprawdzić, określone w standardowej epoce uniksowej.

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

Usługa zwróci kod JSON z informacją, czy masz coś w kalendarza w danym zakresie.

{"available":true}

Obsługiwanie JSONP na stronach internetowych

Po niewielkiej zmianie Twoja usługa JSON może stać się JSONP, co oznacza, że można go nazwać JavaScript 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. Ten to nazwa funkcji w JavaScripcie po stronie klienta, która zostanie wywołana wartością zwracaną przez usługę.

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

W tym przykładzie wyświetli się w przeglądarce pole komunikatu z danymi wyjściowymi usługi. , bo jako prefiks określamy wbudowaną funkcję alert() przeglądarki. Zwrócony kod JavaScript będzie wyglądać następująco:

alert({"available":true})

Przekierowania

Ze względów bezpieczeństwa treści zwracane przez usługę treści nie są udostępniane z script.google.com, ale nastąpiło przekierowanie do jednorazowego adresu URL na stronie script.googleusercontent.com Oznacza to, że jeśli korzystasz z usługi treści , aby zwrócić dane do innej aplikacji, upewnij się, że klient HTTP skonfigurowane pod kątem śledzenia przekierowań. Na przykład w narzędziu wiersza poleceń cURL dodaj flagę -L. Więcej informacji znajdziesz w dokumentacji klienta HTTP jak włączyć tę funkcję.