コンテンツ サービス

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

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

基本情報

次の例は、コンテンツ サービスの使用方法を示しています。

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 サービスを少し変更するだけで、ブラウザの JavaScript から呼び出せる 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 属性がサービス URL に設定され、追加の prefix パラメータが設定されたスクリプト タグを作成します。これは、サービスから返された値で呼び出されるクライアントサイド JavaScript の関数の名前です。

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

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

alert({"available":true})

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

リダイレクト

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