Inhaltsservice

Wenn ein Skript als Web-App veröffentlicht wird, werden die speziellen Callback-Funktionen doGet() und doPost() werden aufgerufen, wenn eine Anfrage an die URL Anstatt ein Benutzeroberflächenobjekt zurückzugeben, das mit der Methode HTML-Dienst, der Mit dem Inhaltsdienst können Rohdaten zurückgegeben werden. Textinhalte. Damit können Sie Skripts schreiben, die als „Dienste“ fungieren, auf GET- und POST-Anfragen antworten und Daten mit verschiedenen MIME-Typen bereitstellen

Grundlagen

Hier ist ein einfaches Beispiel für den Content-Dienst:

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

Stellen Sie das Skript als Webanwendung bereit. mit denselben Schritten wie bei einer Benutzeroberfläche. Wann? eine GET-Anfrage an die URL des Skripts gesendet wird, wird der Text Hello, world! zurückgegeben. Neben reinem Text unterstützt der Dienst auch die Rückgabe von ATOM, CSV-, iCal-, JavaScript-, JSON-, RSS-, vCard- und XML-Inhalte

RSS-Feeds bereitstellen

Versuchen wir es mit etwas Kompliziertem, z. B. dem Filtern eines RSS-Feeds. Die XKCD-Comics sind immer witzig, aber man kann nicht das ganze Lied bekommen es sei denn, Sie bewegen den Mauszeiger über den Comic-Strip, um den zusätzlichen Alt-Text zu sehen. Das Bewegen der Maus über einen mobilen Browser ist nicht möglich, daher funktioniert dies nicht.

Angenommen, wir möchten den Feed so bearbeiten, dass sich die zusätzliche Pointline im Feed befindet. direkt angezeigt. Statt den Mauszeiger darüber zu bewegen, haben Sie einfach ein wenig nach unten gescrollt, um es zu sehen. Das auf einem Mobilgerät problemlos funktionieren. Hier ist der 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);
}

Das mag kompliziert erscheinen, aber es besteht aus einfachen Teilen. Wir verwenden die URL-Abrufdienst zum Abrufen des Originals XKCD-RSS-Feed Dann verwenden wir einen regulären regulären JavaScript-Ausdruck, Substitutionen, die wir brauchen. Schließlich verpacken wir den bearbeiteten Feed TextOutput-Objekt und legen Sie das MIME- in RSS ein.

Veröffentlichen Sie das Skript als Web-App, um dies in Aktion zu sehen. anonymer Zugriff (da Ihr RSS-Reader die Website Nutzer). Füge dann die URL des Dienstes (nicht den ursprünglichen RSS-Feed) zu deinem RSS-Feed hinzu. oder direkt in einem Webbrowser aufrufen. Fertig!

JSON aus Skripts bereitstellen

Was können wir sonst noch mit dem Inhaltsdienst tun? wie Sie JSON-Daten für andere Skripte oder andere Websites und Dienste! Hier ist ein einfaches Skript, mit dem ein mit dem jeder sehen kann, ob ein Zeitblock an einem bestimmten .

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

Veröffentlichen Sie die Datei wie zuvor als anonyme Webanwendung, damit sie funktioniert. In diesem Fall Nutzer Ihres neuen Dienstes diesen nutzen können, indem sie URL-Parameter am Ende des Service-URL. Die Parameter start und end geben einen zu prüfenden Zeitraum an. die in der Unix-Standardzeit angegeben wurden.

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

Der Dienst gibt JSON-Dateien zurück, die angeben, ob in Ihrem Kalender in diesem Bereich.

{"available":true}

JSONP auf Webseiten bereitstellen

Mit einer geringfügigen Änderung kann Ihr JSON-Dienst JSONP, was bedeutet, dass er aufgerufen werden kann, über JavaScript in einem Browser. Hier ist das neue Skript:

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

Um diesen Dienst in einem Browser aufzurufen, erstellen Sie ein Skript-Tag, dessen Attribut src ist die URL Ihres Dienstes mit dem zusätzlichen Parameter prefix. Dieses ist der Name der Funktion in Ihrem clientseitigen JavaScript, die aufgerufen wird durch den vom Dienst zurückgegebenen Wert.

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

In diesem Beispiel wird im Browser ein Meldungsfeld mit der Dienstausgabe angezeigt. da wir die integrierte alert()-Funktion des Browsers als Präfix angeben. Die Der zurückgegebene JavaScript-Code sieht so aus:

alert({"available":true})

Weiterleitungen

Aus Sicherheitsgründen werden vom Inhaltsdienst zurückgegebene Inhalte nicht von script.google.com, sondern wird stattdessen zu einer einmaligen URL unter script.googleusercontent.com. Wenn Sie den Inhaltsdienst wenn Sie Daten an eine andere Anwendung zurückgeben möchten, müssen Sie sicherstellen, dass der HTTP-Client Weiterleitungen folgen. Im cURL-Befehlszeilendienstprogramm Fügen Sie das Flag -L hinzu. Weitere Informationen finden Sie in der Dokumentation Ihres HTTP-Clients. wie Sie dieses Verhalten aktivieren können.