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.