內容服務

將指令碼發布為網頁應用程式時,特殊回呼函式 每當指令碼的容器發出要求時,系統就會叫用 doGet()doPost() 網址。與其傳回 HTML 服務,則 內容服務可用來 文字內容可讓你編寫指令碼做為「服務」 回應 GETPOST 要求,以及各種 MIME 類型的提供資料。

基本概念

以下是內容服務的簡易範例:

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

將指令碼部署為網頁應用程式, 使用與提供使用者介面時相同的步驟時間 對指令碼網址發出 GET 要求,Hello, world! 將是 。除了純文字外,這項服務也支援傳回 ATOM、 CSV、iCal、JavaScript、JSON、RSS、vCard 和 XML 內容。

提供 RSS 動態消息

我們再試試稍微複雜的一點,例如篩選 RSS 動態消息。 XKCD 漫畫總是搞笑,但絕對不可能滿是 笑話。除非將滑鼠遊標懸停在漫畫上,以查看額外替代文字。 很抱歉,行動瀏覽器不支援這項功能,因此這項功能無法運作。

假設我們要編輯動態消息 在動態饋給中納入額外的段落 而不只是將遊標懸停在稍微向下捲動畫面的情況下沒錯 都適合行動裝置程式碼如下:

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

這個過程可能看似複雜,但卻分成幾個簡單部分。我們會使用 網址擷取服務:擷取原始 XKCD RSS 動態消息。接著,我們使用標準 JavaScript 規則運算式 替代文字最後,將編輯過的動態饋給納入 TextOutput 物件,並設定 MIME 設為 RSS。

如要查看實際操作情形,請將指令碼發布為網頁應用程式,請務必將指令碼設為允許存取 因為你的 RSS 閱讀器以匿名方式瀏覽 使用者)。接著,將服務網址 (而非原始 RSS 動態消息) 新增至 RSS 或直接在網路瀏覽器中造訪。這樣就大功告成了!

透過指令碼提供 JSON

我們還可以如何利用「內容」服務?如何將 JSON 提供給其他用戶端 指令碼或其他網站和服務!以下這個簡單的指令碼和 這項服務,可供任何人查看日曆時段是否在特定位置營業 讓應用程式從可以最快做出回應的位置 回應使用者要求

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

和先前一樣,以匿名網頁應用程式發布。在本例中 使用者只要新增網址參數,即可在 服務網址startend 參數可提供檢查的時間範圍。 會在標準 Unix 紀元中指定

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

這項服務會傳回 JSON 來回報 符合這個條件。

{"available":true}

在網頁中提供 JSONP

只要稍微變更,您的 JSON 服務 JSONP,表示您可以將其呼叫 透過瀏覽器中的 JavaScript以下是新指令碼:

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

如要從瀏覽器呼叫這項服務,請建立指令碼標記,並具有 src 屬性 是服務的網址,包含名為 prefix 的額外參數。這個 是您用戶端 JavaScript 中呼叫的函式名稱。 以及服務傳回的值。

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

本例在瀏覽器中顯示訊息方塊和服務輸出內容。 因為我們已將瀏覽器內建的 alert() 函式指定為前置字元。 傳回的 JavaScript 程式碼如下所示:

alert({"available":true})

重新導向

基於安全考量,內容服務所傳回的內容不會在 script.google.com,但已重新導向至以下網址的一次性網址: script.googleusercontent.com。也就是說,如果您使用「內容」服務 如要將資料傳回其他應用程式,您必須確定 HTTP 用戶端 設定追蹤重新導向以 cURL 指令列公用程式為例 加上 -L 旗標。詳情請參閱 HTTP 用戶端的說明文件 瞭解如何啟用這項行為