OpenSocialについて調べてみた際のメモ

mixiアプリに興味がありましたので、その機関となるOpenSocialを学びます。 自分用のメモです。

今回はOpenSocialを利用してガジェットを作ろう!を教科書に使います。

基本的なこと

OpenSocialGoogle社が開発したSNSアプリの共通規格です。 もしSNSがこのopensocialに対応していれば、特別な作業をしなくても移植して利用することが可能です。 簡単な仕組みとしては以下の通りです。

SNSの画面上で実際に動作をするガジェットはXMLファイルで記載します。

[cc lang="xml"] <?xml version="1.0" encoding="UTF-8"?> <![CDATA[ Hello, world! ]]> [/cc]

通常タグは自分で決めるのですが、OpenSocialにはいくつかタグが決められています。

  • Module ルートになるタグです。
  • ModulePrefs ガジェットの情報をいくつかの属性を使って記述します。
  • Require 利用する機能を宣言するために使われます。
  • UserPref ユーザ設定項目を定義するために記述されます。
  • Content 具体的なコンテンツ(HTMLやJavaScriptなど)

開発者は,ContentタグにHTMLやJavaScriptなどを記述することが中心的な作業となります。 Contentタグにはviewを設定することができるので、複数のContentを表現することができます。

[cc lang="xml"]

[/cc]

SNS画面で最初に実行関数は「gadgets.util.registerOnLoadHandler() 」を指定します。 引数に指定した関数が最初に実行されます。

homeビュー(自分のMyページ)

OpenSocialにはオーナー(OWNER)とビューワー(VIEWER)という概念があります。 オーナーはガジェットをサイトに貼付けた人。ビューワーはそれを見る人を意味します。 homeの時は自分がオーナーでありビューワーでもある。 (profileビューは他人が見るプロフィール画面に張られる)

  • opensocial.IdSpecオブジェクト:オーナー、ビュワー「誰のため」の情報かをしていできる
  • opt_paramsオブジェクト:キーと値の組み合わせでリクエストの詳細を指定するものです
  • opensocial.DataRequestオブジェクト:リクエストをバッチでまとめて行い,レスポンスもコールバック一回で済ませることができます。

友達一覧の取得リクエストを生成する。 [cc lang="xml"] // リクエストオブジェクトを生成 var req = opensocial.newDataRequest(); // オーナーの友達を表すIdSpecを生成 var owner_friends = {}; owner_friends[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.OWNER; owner_friends[opensocial.IdSpec.Field.GROUP_ID] = opensocial.IdSpec.GroupId.FRIENDS; var owner_friends = opensocial.newIdSpec(owner_friends); // 同じガジェットをインストールしている人最大1000人まで取得 var opt_params = {}; opt_params[opensocial.DataRequest.PeopleRequestFields.MAX] = 1000; opt_params[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.HAS_APP; // 友達一覧を取得するリクエストを生成 var people_request = req.newFetchPeopleRequest(owner_friends, opt_params); // 友達一覧を取得するリクエストをowner_friendsと名前を付けて、リクエストオブジェクトに追加 req.add(people_request, 'owner_friends'); [/cc] opensocial.DataRequest.PeopleRequestFields.FILTERは取得する友達の条件を追加できます。 opensocial.DataRequest.FilterType.HAS_APPは同じガジェットを持っている人のみ取得することを意味している。