MySpace
Developer PlatformとOpenSocial
OpenSocialの概要とOpenSocialがMySpaceに適している理由について説明します。
MySpaceでOpenSocialを利用する理由
まずは、MySpaceがどのように始まったかについて説明しましょう。MySpaceには、ユーザーがアプリケーションを記述したという興味深い歴史があります。このページをご覧になっている皆さんも、その歴史に深くかかわってきたのかもしれません。
MySpaceが始まって以来、MySpaceではユーザーが作成した、インストール可能なJavaScriptアプリケーションが利用されてきま
した。そのときからかかわってきた開発者の皆さんにとっては、自分のユーザープロフィールはHTMLやJavaScript、CSSといったパレットで自
由に描くことができる、何も描かれていないキャンバスのようなものだったでしょう。ブラウザで表示できさえすればよく、できることに制約はありませんでし
た。
MySpaceは、このようなことが可能になった最初のサイトではありません。必要なテクノロジを利用して独自の「パーソナルなWebサイト」を構
築することができるサイトやサービスは数多くありました。 MySpaceが他のサイトやサービスと異なるのは、MySpaceがパーソナルサイトとソー
シャルネットワークアプリケーションの両方であったことです。つまり、自身のサイトを思う存分カスタマイズでき、なおかつさまざまな方法で友人と対話することができたのです。
制約のないCSSとHTMLによって、ユーザーは無限の方法でプロフィール表示を設定できましたが、このようなMySpaceの操作性を実現してい
たのはJavaScriptでした。MySpaceが開始されて以来、ユーザーはフレンド一覧のカスタマイズからMySpaceメッセージの送信まで、あ
らゆるJavaScriptウィジェットを作成し始めました。また作成したアプリケーションは、自身のプロフィールだけで使用するものではありませんでし
た。当時はあまりよく知られていなかった「カットアンドペースト」という方法を使用して、ユーザーは好きなアプリケーションを自分のプロフィールに「イン
ストール」できました。
このような機能はどのように開発されたのでしょうか。特定のXML/JSON
APIは提供されてはいませんでしたが、ユーザーはJavaScriptを使用したスクリプトをすばやく作成して普及させることで、既存のMySpace
マークアップをスクリーンスクレイプしたり(データ収集が目的)、収集したデータを適切なhttp値を出力して操作していました。
もちろん、完全にオープンなMySpaceというのが理想でしたが、 やがて営利目的の不正利用が始まりました。不正なユーザーが、多くの不正なフ
レンドを持つことで利益を享受したり、損害を発生させたり、スパムによって利益を上げるといったことを始め、規約に違反するアプリケーションを作成するよ
うになりました。綿密に考慮された、規約を遵守する「メッセージ送信用」アプリケーションでは、ユーザーの要求に応じてしかメッセージは送信されません
が、スパム送信者が作成したアプリケーションでは、ユーザーの帯域幅で許容される最大数のメッセージが送信されます。
スパム送信者がサイトに現れたため、MySpaceでは特定の種類のJavaScriptやHTML、CSSをブラックリストに載せるよう対応を始
めました。可能な限りJavaScriptを維持するように取り組みましたが、最終的にJavaScriptの利用が完全に禁止されるまでは、不正なユー
ザーは少ない頻度ながらも確実にMySpaceのフィルターを通り抜けて不正行為を行っていました。サードパーティアプリケーション開発者に残った唯一の
ダイナミックな代替手段はFlashでした。YouTubeなどのサイトでは、サイトを開始したときにはMySpaceのプロフィールにFlashが広く
用いられていました。残念なことに、今はもうこのようなアプリケーションはMySpaceのデータストリームから完全に排除されてしまいました。
では、MySpaceではどのような理由でOpenSocialを利用するのでしょうか。正当なアプリケーション開発者は結果的に身動きが取れなく
なってしまい、JavaScriptでの新たな悪用を排除するたびに弊社では残念な思いをしていました。スパム送信者を10人ブロックするたびに、正当な
方法でユーザーを楽しませて利益を上げていた開発者を少なくとも何人かはブロックしてしまっていました。OpenSocialプラットフォームは、このよ
うなMySpaceユーザーが再度楽しめる機会を提供します。しかもより安全で体系立っていながら、柔軟性にも優れています。
これまでの経緯については以上です。次に、いくつかのコードについて説明します。このドキュメントを読み終わるころには、MySpaceでOpenSocialアプリケーションのサンプルをいくつか作成できるようになっていることでしょう。
MySpace Developer
Platformの概要
MySpace Developer
Platformは、サードパーティアプリケーション開発者がMySpaceのデータや機能を利用できるようにする、一連のサービスです。以下のサービスを提供します。
- アプリケーションの作成・公開(デバッグも可能)のための一連のオンラインツール。ブラウザとサイト間、サイト同士のやり取りに必要なエンドポイントを提供する、RESTful
APIのセット(jsonやxml、また必要に応じて他の形式でも提供)。単純で直感的なURIスキーマを使用するHTTPプロトコルを介して実装。
- 開発したアプリケーションで自サイトとデータを交換するためのしくみ。
- エンドユーザーがアプリケーションを検索して自身のプロフィールにインストールするためのシステム。
- エンドユーザーの身元を保護したり、MySpaceサーバーと自サイト間の通信を確認したりするためのセキュリティのしくみ。
つまりMySpace Developer
Platformを使用すると、MySpaceユーザーを楽しませるアプリケーションを確実に、そして安全に作成でき(マジックソースを追加した場合)、
MySpaceユーザーは今までにない面白い方法で「ソーシャルグラフ」を探索できます。また、自サイトの機能をMySpaceに統合することもできま
す。これによって何を実現できるでしょうか。常に面白いものを求めているMySpaceユーザーを楽しませるアプリケーションを作成することで、名声を得
たり、認知度を高めたり、自サイトや自サービスへのアクセス率を高めることができます。
OpenSocialの概要
OpenSocialはGoogleや複数のソーシャルネットワーキングサイトと協力して構築した、JavaScript
API(アプリケーションプログラミングインターフェイス)です。OpenSocialは、開発者のコードとMySpace Developer
Platformの中間に位置します。記述するコードでOpenSocialを呼び出すと、OpenSocialはMySpace Developer
Platformを呼び出します。
また、OpenSocialでは拡張に向けたガイドラインも提供します。たとえば、MySpaceユーザーには、OpenSocialのスペックに
はない「ヒーロー」というセクションがあります。後で説明するように、OpenSocialインターフェイスを使用すると、専用のMySpaceプロパ
ティを設定できます。
OpenSocial MySpaceアプリケーションのデモ
下記のビデオでは、MySpaceのチーフソフトウェアアーキテクトであるChris BissellがサンフランシスコのSix Apart社でOpenSocial
MySpaceアプリケーションの簡単なデモを行った様子を紹介しています。
OpenSocial
MySpaceアプリケーションのデモ-Chris Bissell
MySpace
Developer Platformに適したOpenSocial
OpenSocialとMySpace Developer
Platformは連携して動作する一連のJavaScriptとサーバーサイドコンポーネントであり、アプリケーションの作成に必要な標準インターフェイスを提供します。
作成するアプリケーションとMySpace、OpenSocial間のやり取りについて、以下に概要を示します。ご覧のとおり、
OpenSocialは完全にクライアント側に配置されます。OpenSocialサーバーは不要で、インターネット上では作成するアプリケーションとい
くつかの「OpenSocial」エンティティ間のやり取りは発生しません。
図1:OpenSocialとMySpace Developer Platformコンポーネントの図解
自身のアプリケーションを実行すると、そのアプリケーションがIFrameでホストされるのがわかります。コードに関連するソースを表示すると、ま
ず「opensocialreference.js」への参照が表示され、次に「MyOpenSpace.js」への参照が表示されます。これらのファイ
ルにはOpenSocialの実装や、そこで利用するMySpace拡張機能に関する重要な情報が含まれていますので慎重に確認してください。
記述するコードとブラウザ、OpenSocial、サーバー間のやり取り
opensocialreference.jsとMyOpenSpace.jsはどのようにやり取りするのでしょうか。
MyOpenSpace.jsはopensocialreference.jsに依存します。OpenSocialでは、いくつかの基本的なソーシャル
ネットワーキングオブジェクトを定義し、それらのオブジェクトの取得方法や更新方法に関する実装も定義します。そしてMyOpenSpaceは、これらの
オブジェクトをMySpaceサーバーサイドAPIの呼び出しにマッピングします。オブジェクトを拡張することもあります(これについては後で詳細を説明
します)。コードはopensocialの名前空間にほぼ排他的にヒットしますが、ディスパッチとデータマッピングを行っているのは
MyOpenSpaceのコードであることに注意してください。たとえば次のコードは、「オーナー」(すなわちアプリケーションをインストールした人)の
フレンドに対する正式なOpenSocial要求です。
コードスニペット1:オーナーのフレンドに対する基本的なDataRequest
function init()
{
var dataRequest = opensocial.newDataRequest();
//Create a request for the owner's friends
var friendRequest = dataRequest.newFetchPeopleRequest(opensocial.DataRequest.Group.OWNER_FRIENDS);
//Add the request for processing.
dataRequest.add(friendRequest);
//Send the request, passing in a callback.
dataRequest.send(response);
}
コードによって、その要求がMySpace RESTful APIに対してAjax呼び出しを発行し、MySpace RESTful
APIがJSON形式で結果を返します。要求の例を以下に示します。
http://api.msappspace.com/opensocial/OWNER/profile.JSON...(params and security token)
以下は応答の例です。応答がJSON形式であることに注意してください。JavaScriptオブジェクトで評価されるため、開発者が理解できる形式である必要はありません。
コードスニペット2:内部APIの応答:フレンド(JSON形式)
{"count":3,
"friends":
[{"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/b2.ac-images.myspacecdn.com\/00000\/20\/52\/2502_s.jpg",
"name":"Tom",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/6221",
"userId":6221,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/tom"},
{"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"VipyApp 6",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/313945780",
"userId":313945780,
"userType":"Application",
"webUri":"http:\/\/www.myspace.com\/313945780"},
{"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"V2",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/users\/313921193",
"userId":313921193,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/313921193"}],
"next":null,
"prev":null,
"topFriends":null,
"user":{"__type":"User:#MySpace.Services.DataContracts",
"image":"http:\/\/x.myspace.com\/images\/no_pic.gif",
"name":"V1",
"onlineNow":false,
"uri":"http:\/\/api.msappspace.com\/opensocial\/OWNER",
"userId":313915716,
"userType":"RegularUser",
"webUri":"http:\/\/www.myspace.com\/vipymyspace1"}}
OpenSocialでは、上記のコードを開発者自身が解析する必要はありません。MySpaceのOpenSocialグルーであるMyOpenSpace.jsが応答を解析し、一連のOpenSocial
Personオブジェクトにマッピングします。
以下に、上記のコードの処理方法を示します。
コードスニペット3:OWNER_FRIENDSの単純な応答ハンドラ
function responseCallback(dataResponse)
{
var friendsData = dataResponse.get(opensocial.DataRequest.Group.OWNER_FRIENDS).getData();
friendsData.each(
function(friendData) {
var friendName = friendData.getField(opensocial.Person.Field.NAME);
var friendThumbnailUrl = friendData.getField(opensocial.Person.Field.THUMBNAIL_URL);
//Do work here with the friend's name and the friend's profile image...
}
);
}
以上がOpenSocialで最も重要な部分、つまりDataRequestとDataResponseです。必要なデータを
DataRequestにまとめ、DataResponseから結果を受け取ります。1回の呼び出しにできるだけ多くの要求をまとめればアプリケーション
のパフォーマンスが高まり、ユーザーの操作性が向上します。
実装されないもの
プロフィールパネルとキャンバスパネル間のナビゲーション機能
この機能は現在動作しません。動作させると、関数「requestNavigateTo()」を呼び出せばプロフィールページとキャンバスページ間をナビゲートできるようになります。
アクティビティとApp Data
App Dataは、アプリケーションでデータを格納する方法です。アクティビティは、発生したイベントをアプリケーションがユーザーに通知する機能です。