アプリケーションデータの取得
個人のアプリケーションデータを取得するリクエストを作成するnewFetchPersonAppDataRequestメソッドは、以下の2つの値を引数として指定します。
- 取得する範囲
- 取得する項目名のリスト
1. 取得する範囲
第5回で解説した、取得する範囲を指定するためのopensocial.IdSpecオブジェクトを指定します。詳細は第5回でも記しましたが、IdSpecオブジェクトは
- 誰を起点にして(USER_ID)
- どんな関係のユーザーを(GROUP_ID)
- どの距離まで取得するか(NETWORK_DISTANCE)
という3つのパラメータで作成します。なお、mixiアプリではどの距離まで取得するかを表すNETWORK_DISTANCEは1に固定されているため、一回のリクエストでは一階層しかたどることができません。
2. 取得する項目名のリスト
取得するデータ項目の名前を配列で指定します。複数の項目名を並べることで、複数のデータ項目をまとめて取得することができます。また、*(アスタリスク)を指定することで、そのユーザーがこのアプリケーションで保存しているデータの全項目を取得することもできます。
以下にリクエストの作成例を示します。
var params = {};
params[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
params[opensocial.IdSpec.Field.GROUP_ID] = opensocial.IdSpec.GroupId.FRIENDS;
var idSpec = opensocial.newIdSpec(params); //VIEWERのFRIENDSを表すIdSpecを生成
var fetchRequest1 = req.newFetchPersonAppDataRequest(idSpec, 'message1');
//指定したユーザー範囲の"message1"項目を取得する
var fetchRequest2 = req.newFetchPersonAppDataRequest(idSpec, ['message1','app-setting']);
//指定したユーザー範囲の2つの項目を取得する
var fetchRequest3 = req.newFetchPersonAppDataRequest(idSpec, '*');
//指定したユーザー範囲のすべての項目を取得する
アプリケーションデータの削除
個人のアプリケーションデータを削除するリクエストを作成するnewRemovePersonAppDataRequestメソッドは、以下の2つの値を引数として指定します。
- 所有者
- 削除する項目名のリスト
1. 所有者
削除するデータの所有者をPersonIDで指定します。前述の通りアプリケーションの利用者(VIEWER)の値のみを削除することができますので、この引数はVIEWERを表すopensocial.IdSpec.PersonId.VIEWERで固定です。
2. 取得する項目名のリスト
削除するデータ項目の名前をリストで指定します。取得時と同様に、複数の項目名を並べることで、複数のデータ項目をまとめて削除できます。同じく*(アスタリスク)を指定することで、そのユーザーがこのアプリケーションで保存しているデータの全項目を削除することができます。
レスポンスの処理
以上の3つのリクエストについて、OpenSocialコンテナからのレスポンスを処理する必要があります。
データの取得のためにnewFetchPersonAppDataRequestで作成したリクエストを処理した場合には、データの取得結果は、名前と値のセットを管理する連想配列(Map)オブジェクトで返されます。
なお、戻り値の実際の型は連想配列を2つ重ねた、Map< PersonId, Map<String, Object>>となります。やや複雑ですが、外側の連想配列は、ユーザーIDを項目名、ユーザーのデータセットを値とし、内側の連想配列は、特定のユーザーについて、項目名と値のセットが返されます。
実際のオブジェクトの値は例えば次のようになります。
{
"24062758": {"message":"デジカメ買ったよ!", "status":"online"},
"25058193": {"message":"肉じゃがおいしかった♪", "status":"offline"}
}
ここでは、まずユーザーIDを表す「24062758」や「25058193」といった項目名に対し、各人のデータが値として設定されていることが分かります。そして各ユーザーに対して、「message」と「status」という項目名と、それぞれの値が取得されています。
レスポンス処理ではこうしたデータを、ユーザーごと、項目名ごとに取り出して処理することになります。データの保存、削除の場合の結果は特別な戻り値はなく、DataResponseオブジェクトのhadErrorメソッドでエラー発生の有無を確認し、保存、削除が成功したかどうかを判断します。
