OpenSocialを始めよう(4) - プロフィールデータを取得する
(1) 「リクエストのコンテナを作成する」となっているのが以下の部分です。
var req = opensocial.newDataRequest();
「コンテナ」と言っているのは、このオブジェクト(req変数。DataRequest型)に対して複数のリクエストを追加し、一回の通信で複数のリクエストを同時に送信することができるからです。詳しいことは以下の説明を見ればわかるでしょう。
(2) コンテナに対してリクエストを追加しているのがこの部分です。
req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), "viewer"); req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER), "owner");
DataRequest.add()メソッドが、コンテナに対してリクエストを追加するメソッドです。このメソッドは次のような定義となっています。
add(リクエスト, レスポンスを識別するためのキー文字列);
まず第一引数は、追加するリクエストそのものです。リクエストは、DataRequestクラスが持つ以下のようなメソッドを使って生成することになります。
Object newFetchActivitiesRequest(idSpec, opt_params)
アクティビティストリーム(後の記事で解説)からデータを取得するためのリクエストを生成します。
Object newFetchPeopleRequest(idSpec, opt_params)
友達情報を取得するためのリクエスト(次回解説)を生成します。
Object newFetchPersonAppDataRequest(idSpec, keys)
ユーザごとに持つ永続化情報(後の記事で解説)を取得するためのリクエストを生成します。
Object newFetchPersonRequest(id, opt_params)
プロフィールデータを取得するためのリクエストを生成します。
Object newUpdatePersonAppDataRequest(id, key, value)
ユーザごとに持つ永続化情報(後の記事で解説)を更新するためのリクエストを生成します。
ざっと見渡すとわかる通り、newFetchXXXRequest()がデータ取得用のメソッド、newUpdateXXXRequest()がデータ更新用のリクエストを生成するメソッドです。今回は、newFetchPersonRequest()を使用します。
DataRequest.add()メソッドの第二引数は、「レスポンスを識別するためのキー文字列」となっています。一回の通信で複数のリクエストを送信できるのですから、そのレスポンスも一度に戻ってきます。「このレスポンスは、どのリクエストに対するものか?」を識別するために、目印として使用する文字列を指定するのがこの引数です。
(3) 非同期処理でリクエストを送信し、結果を非同期で処理しているのがこの部分です。
req.send(function(resp) {
リクエストを送信するには、DataRequest.send()メソッドを使用します。処理は非同期で行われるため、その結果を処理するための関数オブジェクトを渡すことになります。
コールバック関数に渡されるのは、DataResponseクラスのオブジェクトです。
(4) レスポンスから、プロフィールデータを取得しているのがこの部分です。
DataResponseオブジェクトは、複数のリクエストに対する複数のレスポンスを保持しています。DataRequest.add()メソッドを呼び出す際に指定した、識別用の文字列を用いてget()メソッドを呼び出すことで、特定のリクエストに対するレスポンスを取得することができます。
var viewer = resp.get("viewer").getData();
var owner = resp.get("owner").getData();
DataResponse.get()の戻り値はResponseItemクラスのオブジェクトです。個々のリクエストが正常に終了したかどうかを表すhadError()メソッド、エラー情報を取得するgetError()、getErrorMessage()と言ったメソッドが存在します。
今回使っているgetData()メソッドは、処理が正常終了した際、結果となるオブジェクトを取得するためのメソッドです。戻り値の型は決まっておらず、個人のプロフィールデータの場合はPersonクラス、複数の結果が格納されている場合はCollectionクラスなどが戻ります。
(5) プロフィールデータを取得しているのがこの部分です。
return "ID:" + person.getId() + "<br>" +
"表示名:" + person.getDisplayName();
Personクラスのメソッド、getId()とgetDisplayName()を使用して、ユーザIDと表示名を取得しています。
このサイトについて
TrackBack URL :
