Servizio contenuti

Quando uno script viene pubblicato come app web, la speciale funzione di callback doGet()e doPost() vengono richiamati ogni volta che viene fatta una richiesta al prompt URL. Anziché restituire un oggetto dell'interfaccia utente creato con servizio HTML, il Il servizio di contenuti può essere utilizzato per restituire dati non elaborati contenuti testuali. Ciò ti consente di scrivere script che fungono da "servizi", rispondere a richieste GET e POST e gestire dati di vari tipi MIME.

Nozioni di base

Ecco un esempio semplice del servizio di contenuti:

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

Esegui il deployment dello script come app web. gli stessi passaggi che seguiresti per pubblicare un'interfaccia utente. Quando viene effettuata una richiesta GET all'URL dello script, il testo Hello, world! verrà restituito. Oltre al testo normale, il servizio supporta anche la restituzione di ATOM, Contenuti CSV, iCal, JavaScript, JSON, RSS, vCard e XML.

Pubblicazione di feed RSS

Proviamo con qualcosa di un po' più complicato, come filtrare un feed RSS. La I fumetti di XKCD sono sempre divertenti, ma non si riesce a comprenderne a meno che non passi il mouse sopra il fumetto per vedere il testo alternativo extra. Purtroppo non è possibile passare il mouse sopra un browser mobile, quindi non funziona.

Supponiamo di voler modificare il feed in modo da aggiungere la battuta finale. e invece di passare il mouse sull'immagine, ho appena fatto scorrere verso il basso per vederla. Questo funziona bene su un dispositivo mobile. Ecco il codice:

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

Può sembrare difficile, ma si suddivide in parti semplici. Utilizziamo Servizio di recupero URL per recuperare l'originale Feed RSS XKCD. Usiamo quindi un'espressione regolare JavaScript standard per le sostituzioni di cui abbiamo bisogno. Infine, racchiudiamo il feed modificato in una TextOutput e imposta il tipo MIME digita RSS.

Per vedere come funziona, pubblica lo script come app web, assicurandoti di consentire accesso anonimo (poiché il lettore RSS lo visita in forma anonima dell'utente). Quindi, aggiungi l'URL del servizio (non il feed RSS originale) al tuo feed RSS o semplicemente da un browser web. È tutto.

Gestione di JSON dagli script

Che cos'altro possiamo fare con il servizio Contenuti? Come gestire la pubblicazione di file JSON in altre script o altri siti web e servizi. Ecco uno script semplice che implementa servizio che chiunque può utilizzare per verificare se uno spazio del calendario è aperto in un determinato nel tempo.

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

Come prima, pubblicala come app web anonima per farla funzionare. In questo caso, gli utenti del nuovo servizio possono utilizzarlo aggiungendo i parametri URL alla fine del URL del servizio. I parametri start e end forniscono un intervallo di tempo da verificare, specificato nell'epoca Unix standard.

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

Il servizio restituirà un file JSON che segnala se nel tuo calendario in quell'intervallo.

{"available":true}

Pubblicazione di JSONP nelle pagine web

Con una piccola modifica, il servizio JSON può diventare JSONP, che può essere chiamato da JavaScript in un browser. Ecco il nuovo 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);
}

Per chiamare questo servizio da un browser, crea un tag script il cui attributo src è l'URL del tuo servizio, con un parametro aggiuntivo chiamato prefix. Questo è il nome della funzione in JavaScript lato client che verrà chiamata con il valore restituito dal servizio.

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

Questo esempio mostra una finestra di messaggio nel browser con l'output del servizio, poiché specifichiamo come prefisso la funzione alert() integrata del browser. La Il codice JavaScript restituito sarà simile a:

alert({"available":true})

Reindirizzamenti

Per motivi di sicurezza, i contenuti restituiti dal servizio Contenuti non vengono pubblicati da script.google.com, ma reindirizzato a un URL utilizzabile una sola volta all'indirizzo script.googleusercontent.com. Ciò significa che se utilizzi il servizio Contenuti per restituire i dati a un'altra applicazione, devi assicurarti che il client HTTP configurate per seguire i reindirizzamenti. Ad esempio, nell'utilità a riga di comando cURL, aggiungi il flag -L. Consulta la documentazione del tuo client HTTP per ulteriori informazioni informazioni su come attivare questo comportamento.