×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。



>> ユーザーガイド >> コンテンツサービス


コンテンツサービス


WWW GoogleStyle


コンテンツサービスとは

スクリプトはWebアプリとして公開されたとき、特殊なコールバック関数であるdoGet()関数とdoPost()関数が呼び出されます。これは、スクリプトのURLに対してリクエストがなされたときには常に発生します。
UiAppまたはHtmlサービスで作成されたユーザーインターフェイスのオブジェクトを返すのではなく、 ContentServiceは生のテキストコンテンツを返すために使用できます。 GETとPOSTの要求に対応し、さまざまなMIMEタイプのデータを提供して"サービス"として動作するスクリプトを書くことができます。

簡単な例を紹介します。


function
doGet() {
return
ContentService.
createTextOutput(
'Hello World'
); }

まず、ユーザーインターフェイスを提供していたときと同じ手順でWebアプリケーションとしてスクリプトを設置します。 GETリクエストがスクリプトのURLに対してなされたとき、テキストの"Hello World"が返されます。プレーンテキストだけでなく、XML、RSS、Atom、JSONなどのコンテンツも返すことができます。



使用例

[ RSSフィードサービス ]

RSSフィードのフィルタリングのような少し複雑なことを試してみましょう。Google.Readerのエクスペリエンスを向上させるためにContentServiceを使用してみます。

ここにある例は、楽しくてとても有用なサンプルです。XKCD comicsはすごく面白いコミックですが、本当の面白さを満喫するには、コミックストリップの上にマウスを移動させて代替(alt)テキストを表示させないと分かりません。 また残念ながら、携帯電話のブラウザ上ではホバリングすることはできないのでこの動作はしません。

そこで、予備のパンチラインが直接フィードにあったようにフィードを編集してみることにします。ホバリングの代わりに少しスクロールすれば見ることができます。 コードは次の通りです。


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

トリッキーに見えるかもしれませんが、シンプルな部品に分解しているだけです。UrlFetchAppを使って生のXKCD.comのRSS.feedを取得します。
次に、我々が必要とする置換を行うために、標準的なJavaScriptの正規表現を使用しています。最後に、TextOutputオブジェクトで編集されたフィードをラップし、MIMEタイプのRSSなるように設定します。

リーダーでこれを確認できるようにするためには、匿名アクセスを許可できるようにして(リーダーは匿名ユーザーとしてアクセスされるので)、Webアプリと同じようにスクリプトを公開します。 次は、新しいサブスクリプション(定期購読)としてGoogle.ReaderにサービスのURL(元のRSSフィードではない)を追加します。これで、フィードのモバイル対応版がインストールされます。 このフィードまたは別のフィードでも試してみてください。

[ JSONサービス / スクリプト ]

ContentServiceで他に何ができるでしょうか。他のスクリプトやウェブサイト、サービスなどに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アプリとしてこれを公開します。このケースでは、ユーザーはサービスURLの最後にURLパラメータを追加することにより使用することができます。 "start"と "end"パラメーターは、標準的なUnixの"epoch"形式で指定されたチェックする時間範囲を与えます。


curl -L 
<
SCRIPT URL
>?
start
=
1325437200
&
end
=
1325439000

指定範囲内のカレンダー上で何か予定があるかどうかをJSONが指定して戻るサービスが行われます。


{
"available"
:
true
}

[ JSONサービス / Webページ ]

少し手を加えると、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.
JSON); }

ブラウザからこのサービスを呼び出すには、"src"属性をサービスしているURLに設定して、"prefix"と呼ばれる追加のパラメータを指定したスクリプトタグを作成します。 "prefix"には、サービスによって返された値を使って呼び出されるクライアント側のJavaScriptでの関数名を与えます。


<script src="<
URL OF YOUR SCRIPT
>?start=
1325437200
&end=
1325439000
&prefix=alert"
></script>

接頭辞"prefix"としてブラウザの組み込み"アラート"機能を指定しているので、サービス出力を持つブラウザではメッセージボックスを表示します。 JavaScriptコードは次のように返されます。


alert({
"available"
:
true
})

注意!;スクリプトでこのJSONP技術を使用しているときは十分に注意してください。第三者がウェブページにスクリプトタグを埋め込むことが可能になりますから。 データの戻り値を取り込むような悪意のあるWebサイトにアクセスしたとき、騙されてスクリプトを実行してしまうようなことになります。JSONPスクリプトは読み取り専用にすること、非機密情報をのみしか返さないことがベストプラクティスです。


補注

このセクションではコンテンツサービスに関するいくつかの追加の注意事項が含まれています

リダイレクト

セキュリティ上の理由から、コンテンツサービスによって返されたコンテンツはscript.google.comから提供されるのではなく、リクエストはscript.googleusercontent.comで特別なワンタイムURLにリダイレクトされています。 他のアプリケーションにデータを返すためにコンテンツサービスを使用している場合は、HTTPクライアントがリダイレクトに従うように構成されていることを確認する必要があります。 たとえば、cURLコマンドラインユーティリティでは、フラグ"-L"を追加することによって行われます。この動作を有効にする方法の詳細については、HTTPクライアントのマニュアルを参照してください。



2012-10-27

pageTOP