内容服务

将脚本作为 Web 应用发布时,特殊的回调函数 doGet()doPost(),只要对脚本的 网址。我们不会返回使用 HTML 服务内容服务可用于返回原始 文字内容。这让您可以编写充当“服务”、 响应 GETPOST 请求并提供各种 MIME 类型的数据。

基础知识

以下是内容服务的简单示例:

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

将脚本作为 Web 应用部署, 步骤与提供界面时相同时间 向脚本网址发出 GET 请求后,文本 Hello, world! 将是 返回。除了纯文本之外,该服务还支持返回 ATOM、 CSV、iCal、JavaScript、JSON、RSS、vCard 和 XML 内容。

提供 RSS Feed

我们来看一下复杂一点的操作,比如过滤 RSS Feed。通过 XKCD 漫画总是很有趣,但您无法看到完整的漫画 除非您将鼠标悬停在连环画上看到额外的替代文本,否则我不会觉得这是笑话。 很抱歉,你无法将鼠标悬停在移动浏览器上,因此无法执行此操作。

假设我们想要修改 Feed,以便在 Feed 中添加额外的重点信息 不用悬停鼠标,只需向下滚动屏幕即可看到它这样 能否在移动设备上正常运行。代码如下:

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 Feed。然后,我们使用标准的 JavaScript 正则表达式 所需的替代变量。最后,我们将修改后的 Feed 封装 TextOutput 对象并设置 MIME 类型更改为 RSS。

若要查看其实际效果,请将脚本发布为 Web 应用,并确保允许 匿名访问(因为您的 RSS 阅读器将以匿名方式对其进行访问) 用户)。然后将该服务的网址(而不是原始 RSS Feed)添加到您的 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);
}

与之前一样,请将其发布为匿名 Web 应用,以使其正常运行。在此示例中 新服务的用户可通过在 。startend 参数提供了一个要检查的时间范围, 。

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

该服务将返回 JSON,用于报告 日历名称。

{"available":true}

在网页中提供 JSONP

只需稍作更改,JSON 服务就可能变为 JSONP,表示可以对其进行调用 。新脚本如下:

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 客户端 配置为遵循重定向例如,在 c网址 命令行实用程序中, 添加标志 -L。如需了解详情,请参阅 HTTP 客户端的相关文档 有关如何启用此行为的信息。