サンプルコード
それでは、実際のサンプルコードを見てみましょう。今回作成するアプリはmixiでも実際に公開しています。
以下の内容をfetch-people-sample.xmlという名前でUTF-8形式で保存し、第2回の手順に沿ってアプリを作成します。なお、ここでは一部省略しているため、コードの全文は記事添付のサンプルファイルを参照してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="view-sample">
<Require feature="opensocial-0.8" />
</ModulePrefs>
<Content type="html"><![CDATA[
<div id="message"/>
<script type="text/javascript">
gadgets.util.registerOnLoadHandler(function() {
var req = opensocial.newDataRequest();
// *1(ここから)
// VIEWERのFRIENDSの情報をリクエストする
var fparams = {};
fparams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
fparams[opensocial.IdSpec.Field.GROUP_ID] = "FRIENDS";
var fetchOpt = {};
fetchOpt[opensocial.DataRequest.PeopleRequestFields.MAX ] = 1000;
var idSpec = opensocial.newIdSpec(fparams); //fparamsで指定した範囲のIdSpecを作成する
req.add(req.newFetchPeopleRequest(idSpec, fetchOpt), "friends");
// *1(ここまで)
// リクエストを実行
req.send(function(response) {
var friends = response.get('friends').getData();
var msg = 'VIEWERのFRIENDS(マイミクシィ)は現在'
+ friends.getTotalSize() + '人です'; // *2
friends.each(function(friend){ // *3
msg += 'ニックネーム: ' + friend.getDisplayName() + '<br/>';
});
document.getElementById('message').innerHTML=msg;
});
});
</script>
]]></Content>
</Module>
以下、(1)~(3)はリスト内の*1~*3と対応するものとします。
(1)newFetchPeopleRequestメソッドへの追加パラメータとして、最大件数を表すopensocial.DataRequest.PeopleRequestFields.MAXパラメータを指定します。また、取得範囲として、「VIEWERのFRIENDS」という範囲を表すIdSpecオブジェクトを指定します。
(2)コールバック関数でレスポンスを処理します。newFetchPeopleRequestで作成したリクエストの場合、Personオブジェクトを複数持つopensocial.Collectionオブジェクトが返ります。ここではコレクションの属するセット全体のサイズを取得するgetTotalSizeメソッドを使い、マイミクの総数を取得します。
(3)opensocial.Collectionクラスのeachメソッドを使って、コレクション内の各メンバーの情報を取得します。今回はPerson.getDisplayNameメソッドで、マイミクシィのニックネームを順に取り出します。
実行結果は次のような画面となります。

前回のDataRequestオブジェクトについての説明の中で少し言及しましたが、mixiアプリでは、OpenSocial標準のリクエスト以外に、コミュニティ情報を取得するリクエストを行うことができます。
基本的な流れはこれまでのnewFetchPersonRequest・newFetchPeopleRequestメソッドで作成するリクエストの場合と同様です。ただし、これまで説明してきたリクエストはDataRequestオブジェクトのメソッドで作成したのに対し、コミュニティ情報を取得するリクエストは、mixi.newFetchCommunityRequest関数で作成する点が異なります。
mixi.newFetchCommunityRequest関数は、引数としてPersonIDを指定します。VIEWERやOWNER、あるいは任意のユーザーのユーザーIDから、そのユーザーの所属するコミュニティの情報を取得できます。
結果はコミュニティ情報オブジェクトを複数持つopensocial.Collectionオブジェクトが返ります。
コミュニティ情報オブジェクトからは以下の情報を取得することができます。
| 項目名 | 取得方法 |
| コミュニティID | getIdメソッド |
| コミュニティ名 | getNameメソッド |
| コミュニティ画像のURL | getFieldメソッド(引数にmixi.Community.Field.THUMBNAIL_URLを指定) |
以下に、VIEWERの所属するコミュニティ情報を取得するサンプルコードを示します。
var req = opensocial.newDataRequest();
req.add(mixi.newFetchCommunityRequest(opensocial.IdSpec.PersonId.VIEWER), "communities"); //mixi.newFetchCommunityRequest関数でリクエストを作成
req.send(function(response) {
var communities = response.get("communities").getData(); //
communities.each(function(community) { //eachメソッドでコミュニティごとに処理
var community_id = community.getId(); //コミュニティIDを取得
var community_name = community.getName(); //コミュニティ名を取得
var community_thumbnail = community.getField(mixi.Community.Field.THUMBNAIL_URL); //コミュニティ画像のURLを取得
・・・中略・・・
取得した個人情報の取り扱いについて
前回、今回とOpenSocialコンテナから個人情報を取得する方法について説明しましたが、取得した個人情報の取り扱いについては、OpenSocialコンテナが定める規約等に従う必要があります。
例えばmixiアプリでは、取得した個人情報(プロフィール情報やマイミクシィ情報など)について、ガイドラインが設けられています。
例えば
- 取得したデータの二次利用の禁止。取得したデータの利用はアプリの開発・実行のために限定される
- 取得したユーザーID以外のデータについては、24時間以内に削除する
などのガイドラインがあります。
これら以外にも、mixiアプリを作成する上で遵守すべきガイドラインがありますので、詳細は「mixiアプリガイドライン」を参照してください。
規約違反の場合にはmixiアプリが削除される場合がありますので、十分に注意してください。
まとめ
今回は友達の情報を取得するためのリクエストについて説明しました。リクエスト作成の際の引数に指定するIdSpecオブジェクトは、直感的には分かりづらい部分ですので、図表とオプション指定の方法でイメージを固めておきましょう。
前回と今回は、DataRequestオブジェクトの使い方を説明する中で多数のオブジェクトが出てきました。実際のコードを記述する上では、それぞれのオブジェクトの定義やフィールドの確認のため、OpenSocialオフィシャルのドキュメントを頻繁に確認することになります。参考資料にOpenSocial APIリファレンスのリンク先を記してありますので、ぜひ本連載と併せて参照してください。
次回はユーザーの更新情報を通知するためのアクティビティについて扱います。お楽しみに。
