コンテンツ サービス

さまざまな MIME タイプの生のテキスト コンテンツを返す

スクリプトがウェブアプリとして公開されると、スクリプトの URL にリクエストが送信されるたびに、コールバック関数 doGetdoPost が実行されます。Content サービスは、 HTML サービスで作成されたユーザー インターフェース オブジェクトを返すのではなく、生のテキスト コンテンツを返すことができます。サービスとして機能するスクリプトを作成し、GET リクエストと POST リクエストに応答して、さまざまな MIME タイプのデータを提供します。

基本情報

次の例に、Content サービスの使い方を示します。

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

スクリプトをウェブアプリとしてデプロイします。 ユーザー インターフェースの提供と同じ手順を行います。スクリプトの URL に 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);
}

コードは次のコンポーネントで構成されています。 URL 取得サービスを使用して、元の XKCD RSS フィードを取得します。標準の JavaScript 正規表現を使用して置換を行います。編集したフィードを TextOutputオブジェクトでラップし、MIME タイプを RSS に設定します。

実際に動作を確認するには、スクリプトをウェブアプリとして公開し、匿名アクセスを許可します。サービスの URL を RSS リーダーに追加するか、ウェブブラウザで直接アクセスします。

スクリプトから JSON を提供する

Content サービスを使用して、他のスクリプト、ウェブサイト、サービスに 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);
}

これを匿名ウェブアプリとして公開します。ユーザーは、サービス URL の末尾に URL パラメータを追加できます。start パラメータと end パラメータは、標準の 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 属性をサービス URL に設定し、prefix パラメータを追加したスクリプト タグを作成します。これは、サービスから返された値で呼び出されるクライアントサイド JavaScript の関数の名前です。

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

この例では、ブラウザの組み込み alert 関数を接頭辞として使用して、サービス出力を含むメッセージ ボックスをブラウザに表示します。返される JavaScript コードは次のようになります。

alert({"available":true})

JSONP を使用する場合は注意が必要です。誰でもウェブページにスクリプト タグを埋め込むことができるため、悪意のあるウェブサイトにアクセスしたときにスクリプトを実行するように誘導され、返されたデータがキャプチャされる可能性があります。JSONP スクリプトが読み取り専用で、機密情報以外の情報のみを返すようにしてください。

リダイレクト

セキュリティ上の理由から、Content サービスから返されるコンテンツは、script.googleusercontent.com のワンタイム URL にリダイレクトされます。Content サービスを使用して別のアプリケーションにデータを返す場合は、リダイレクトを追跡するように HTTP クライアントが構成されていることを確認してください。curl コマンドライン ユーティリティの場合は、-L フラグを追加します。詳細については、HTTP クライアントのドキュメントをご覧ください。