Opensocial入門を読んで見た(第五章)五回目
長くなりますが、第五章五回目です。

OpenSocial入門 ~ソーシャルアプリケーションの実践開発
外部サーバーの呼び出し
すでに海外などで人気を得ている OpenSocialアプリケーションのほとんどが、任意のWebサービスを呼び出してコンテンツを利用しています。その際には「Gadgets Core JavaScript API」を利用します。具体的にはgadgets.io.makeRequest()関数を使います。
gadgets.io.maketRequest()の引数
- 取得したいコンテンツの位置を示すURL
- 結果が返却された際の実行されるコールバック関数
- 外部サーバへのリクエストに関するパラメータ
結果が返却された際の実行されるコールバック関数
コールバック関数に渡される引数は、リクエストした結果を持つオブジェクトです。
- data:リクエストの際に指定したコンテンツの種別に応じて適切に変換された結果が保持されている。(DOM,TEXT,JSON,FEED)
- errors:エラーが返されたときに、エラー情報が配列として保持される
- text:リクエストの結果得られたコンテンツを文字列で保持される
- rc:HTTPステータスコードが保持される
これらのプロパティは要求の際に指定したコンテンツに種別に従って使い方が異なります。例えば、gadgets.io.ContentType.TEXTが指定されていた場合、dataもtextも同じ結果が保持されます。
例①
要求されたコンテンツ ContentType.TEXT
↓↓
コールバック関数の引数がtext or dataの場合
1 2 |
例②
要求されたコンテンツ ContentType.DOM
1 2 3 4 5 | <?xml version ="1.0"?> <user> <name>albatrus</name> <age> 27</age> </user> |
↓↓
コールバック関数の引数がtextの場合
¥n
という文字列になります。
コールバック関数がdataの場合は、このXML形式の文字列がパースされた結果のDOMが保持されます。
1 2 3 | var doc = obj.data; var name = doc.getElementsByTagName("name")[0].firstChild.nodeValue; var age = doc.getElementsByTagName("age")[0].firstChild.nodeValue; |
例③
要求されたコンテンツ ContentType.JSON
1 | { "user" : {"name" : "albatrus" , "age" : 27}} |
↓↓
コールバック関数の引数がtextの場合
{ ¥”user”¥ : {¥”name” ¥: ¥”albatrus”¥ , ¥”age”¥ : 27}} という文字列のなります。
コールバック関数がdataの場合は、このJSON形式の文字列がパースされた結果のjavascriptオブジェクトが保持されます。
1 2 3 | var user = obj.data["user"]; var name = user.name; var age = user.age; |
例④
要求されたコンテンツ ContentType.FEED
RSSもしくはATOM形式の文字列がjavascriptのオブジェクトに変換されてdataプロパティに保持されます。javascriptのオブジェクトに変換された後の操作は非常に簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version ="1.0" encoding ="utf-8" ?> <feed xmlns ="http://www.w3.org/2005/Atom"> <title> albatrus feed </title> <link href ="http://albatrusfeed.com/ " /> <updata> 2010-3-14T12:20:02Z </upload> <author> <name> alba </name> </author> <id> urn:00000000000 </id> <entry> <title>you can request feeds with nameRequest. </title> <link herf ="http://your .surver.host / 2008/10/04/atom12345" /> <id> urn 0000000001 </id> <updata> 2008-10-20T12:20:02Z </updata> <summary> some text. </summary> <entry> </feed> |
↓↓
コールバック関数の引数がdataの場合
obj.dataオブジェクトは以下の用になります。
1 2 3 4 5 6 7 8 9 10 11 | { URL:"http://albatrusfeed.com/", Title:"albatrus feed", Author : " alba"; Entry : [ URL :"http://your .surver.host / 2008/10/04/atom12345", Title : "you can request feeds with nameRequest. ", Summary : "some text. " ] } |
javascript内では以下のようにFEEDの内容を利用することが可能です。
1 2 3 | var feed = obj.data; var name = name.Author; var title = feed.Entry[0].Title; |
外部サーバへのリクエストに関するパラメータ
gagets.io.makeRequest()で指定可能はパラメータ一覧
gagets.io.makeRequest()で指定可能はパラメータ一覧
| フィールド | 説明 |
|---|---|
| AUTHORIZATION | 要求に使用する認可の種別を指定。 |
| CONTENT_TYPE | 要求の結果としてい期待する形式を指定 |
| METHOD | 要求する際のHTTP Methodを指定 |
1、gadgets.io.AUTHORIZATION
makeRequest()関数による外部サーバーへのアクセスについて、署名を付与することができます。
- gadgets.io.AuthorizationType.NONE – 署名を付与しない
- gadgets.io.AuthorizationType.SIGNED −要求に署名を施す
- gadgets.io.AuthorizationType.OAUTH −OAuthのよる認証を行う(※mixiアプリから外部サーバーへのAOuthによる認証認可要求は、現在サポートされていません。
署名付きリクエストにはmixiアプリの場合、以下のパラメータが付与されます。
- oauth_consumer_key – “mixi.jp”
- oauth_signature_method – “RSA-SHA1″
2、gadgets.io.CONTENT_TYPE
CONTENT_TYPEパラメータにより、外部サーバから得られるコンテンツの期待する形式を指定することができます。この指定によって、コンテンツはJavaScriptオブジェクトに自動的に変換され、mixiアプリから扱いやすくなります。
DOM(XML形式)、FEED(RSS,ATOM Feed形式)、JSON(JSON文字形式)、TEXT(テキスト形式)のいずれかが指定できます。
3、gadgets.io.MethodType
gadgets.io.MethodType.POSTを指定しPOSTメソッドによるリクエストを外部のサービスに送信する場合、URL
と一緒にパラメータを送信したいときにはgadgets.io.RequestParameters.POST_DATAフィールドを使用します。
1 2 3 4 5 6 7 8 9 10 | var params={}; params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST; var post_data = { name = "albatrus",age = "27"}; params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(past_data); gadgets.io.makeRequest("http://albatrus.com/user", function(obj) { //コールバック関数、結果に対しての処理 } params); |
今回の例では、「name = albatrus&age=27」という文字列がリクエストに含まれています。
mixiアプリに関して
mixiでは外部サーバーに通信する際のmakeRequest関数に一定の制限を設けています。
- 接続ホストへの通信が20回連続でタイムアウトした場合、そのホストへの通信は15秒間行うことができない。