SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

mixiアプリで始めるOpenSocial入門

mixiアプリとデータの永続化

mixiアプリで始めるOpenSocial入門(7)

アプリケーションデータの取得

 個人のアプリケーションデータを取得するリクエストを作成するnewFetchPersonAppDataRequestメソッドは、以下の2つの値を引数として指定します。

  1. 取得する範囲
  2. 取得する項目名のリスト

1. 取得する範囲

 第5回で解説した、取得する範囲を指定するためのopensocial.IdSpecオブジェクトを指定します。詳細は第5回でも記しましたが、IdSpecオブジェクトは

  • 誰を起点にして(USER_ID)
  • どんな関係のユーザーを(GROUP_ID)
  • どの距離まで取得するか(NETWORK_DISTANCE)

という3つのパラメータで作成します。なお、mixiアプリではどの距離まで取得するかを表すNETWORK_DISTANCEは1に固定されているため、一回のリクエストでは一階層しかたどることができません。

2. 取得する項目名のリスト

 取得するデータ項目の名前を配列で指定します。複数の項目名を並べることで、複数のデータ項目をまとめて取得することができます。また、*(アスタリスク)を指定することで、そのユーザーがこのアプリケーションで保存しているデータの全項目を取得することもできます。

 以下にリクエストの作成例を示します。

newFetchPersonAppDataRequestメソッドの呼び出し例
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. 所有者
  2. 削除する項目名のリスト

1. 所有者

 削除するデータの所有者をPersonIDで指定します。前述の通りアプリケーションの利用者(VIEWER)の値のみを削除することができますので、この引数はVIEWERを表すopensocial.IdSpec.PersonId.VIEWERで固定です。

2. 取得する項目名のリスト

 削除するデータ項目の名前をリストで指定します。取得時と同様に、複数の項目名を並べることで、複数のデータ項目をまとめて削除できます。同じく*(アスタリスク)を指定することで、そのユーザーがこのアプリケーションで保存しているデータの全項目を削除することができます。

レスポンスの処理

 以上の3つのリクエストについて、OpenSocialコンテナからのレスポンスを処理する必要があります。

 データの取得のためにnewFetchPersonAppDataRequestで作成したリクエストを処理した場合には、データの取得結果は、名前と値のセットを管理する連想配列(Map)オブジェクトで返されます。

 なお、戻り値の実際の型は連想配列を2つ重ねた、Map< PersonId, Map<String, Object>>となります。やや複雑ですが、外側の連想配列は、ユーザーIDを項目名、ユーザーのデータセットを値とし、内側の連想配列は、特定のユーザーについて、項目名と値のセットが返されます。

 実際のオブジェクトの値は例えば次のようになります。

複数人の複数のデータを取得した際の返値の例(JSON形式表記)
{
  "24062758":  {"message":"デジカメ買ったよ!", "status":"online"},
  "25058193":  {"message":"肉じゃがおいしかった♪", "status":"offline"}
}

 ここでは、まずユーザーIDを表す「24062758」や「25058193」といった項目名に対し、各人のデータが値として設定されていることが分かります。そして各ユーザーに対して、「message」と「status」という項目名と、それぞれの値が取得されています。

 レスポンス処理ではこうしたデータを、ユーザーごと、項目名ごとに取り出して処理することになります。データの保存、削除の場合の結果は特別な戻り値はなく、DataResponseオブジェクトのhadErrorメソッドでエラー発生の有無を確認し、保存、削除が成功したかどうかを判断します。

次のページ
サンプルプログラムの作成

この記事は参考になりましたか?

mixiアプリで始めるOpenSocial入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4660 2010/01/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー