Service de contenu

Lorsqu'un script est publié en tant qu'application Web, les fonctions de rappel spéciales doGet() et doPost() sont appelés chaque fois qu'une requête est envoyée à la classe URL. Au lieu de renvoyer un objet d'interface utilisateur créé avec service HTML, le Le service de contenu permet de renvoyer du contenu textuel. Cela vous permet d'écrire des scripts qui servent de "services", répondre aux requêtes GET et POST, et diffuser des données de différents types MIME.

Principes de base

Voici un exemple simple du service de contenu:

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

Déployer le script en tant qu'application Web en suivant les mêmes étapes que si vous diffusiez une interface utilisateur. Quand ? une requête GET est envoyée à l'URL du script, le texte Hello, world! sera renvoyé. En plus du texte brut, le service prend également en charge le renvoi d’ATOM, CSV, iCal, JavaScript, JSON, RSS, vCard et XML.

Diffusion de flux RSS

Essayons quelque chose d'un peu plus complexe, comme filtrer un flux RSS. La Les bandes dessinées XKCD sont toujours drôles, mais on ne peut pas en profiter pleinement à moins que vous passiez sur la bande dessinée pour voir le texte alternatif supplémentaire. Malheureusement, vous ne pouvez pas passer la souris sur un navigateur mobile. Cela ne fonctionne donc pas.

Imaginons que nous voulions modifier le flux et, au lieu de pointer vers le bas, vous avez simplement fait défiler vers le bas pour le voir. Cela fonctionne très bien sur un appareil mobile. Voici le code :

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

Cela peut sembler délicat, mais il se décompose en plusieurs parties simples. Nous utilisons les service de récupération d'URL afin de récupérer l'URL d'origine flux RSS XKCD. Nous utilisons ensuite une expression régulière JavaScript standard pour rendre les substitutions dont nous avons besoin. Enfin, nous encapsulons le flux modifié dans l'objet TextOutput et définir la en RSS.

Pour voir cela en action, publiez le script en tant qu'application Web, en veillant à autoriser un accès anonyme (puisque votre lecteur RSS le consultera en tant qu'utilisateur utilisateur). Ajoutez ensuite l'URL du service (et non celle du flux RSS d'origine) à votre flux RSS ou le consulter directement dans un navigateur Web. Et voilà !

Diffuser du code JSON à partir de scripts

Que pouvons-nous faire d'autre avec le service de contenu ? Qu'en est-il de la diffusion de fichiers JSON vers d'autres des scripts ou d'autres sites Web et services. Voici un script simple qui implémente une que n'importe qui peut utiliser pour vérifier si un créneau d'agenda est disponible en temps réel.

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

Comme précédemment, publiez-la en tant qu'application Web anonyme pour qu'elle fonctionne. Dans ce cas, les utilisateurs de votre nouveau service peuvent s'en servir en ajoutant des paramètres d'URL à la fin de l'URL du service. Les paramètres start et end donnent une période de vérification, spécifié dans l’époque Unix standard.

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

Le service renvoie un fichier JSON indiquant si votre fichier dans cette plage.

{"available":true}

Diffuser du JSONP dans des pages Web

En cas de légère modification, votre service JSON peut devenir JSONP, ce qui signifie qu'il peut être appelé à partir de JavaScript dans un navigateur. Voici le nouveau 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);
}

Pour appeler ce service depuis un navigateur, créez un tag de script dont l'attribut src correspond à l'URL de votre service, avec un paramètre supplémentaire appelé prefix. Ce est le nom de la fonction dans le code JavaScript côté client qui sera appelée par la valeur renvoyée par le service.

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

Cet exemple affiche une zone de message dans le navigateur avec le résultat du service, puisque nous spécifions la fonction alert() intégrée au navigateur comme préfixe. La Le code JavaScript renvoyé se présente comme suit:

alert({"available":true})

Redirections

Pour des raisons de sécurité, le contenu renvoyé par le service Content n'est pas diffusé depuis script.google.com, mais vous avez été redirigé vers une URL unique à l'adresse script.googleusercontent.com Autrement dit, si vous utilisez le service de contenu vers une autre application, assurez-vous que le client HTTP est configurés pour suivre les redirections. Par exemple, dans l'utilitaire de ligne de commande cURL, Ajoutez l'option -L. Pour en savoir plus, consultez la documentation de votre client HTTP. sur la façon d'activer ce comportement.