前回は、はてブチェッカーのhomeビューでオーナーの「友達一覧」、「プロフィール情報」、「アプリデータに保存されたはてなID」、オーナーの友達の「アプリデータに保存したはてなID」という4つのリクエストを送信するところまで解説しました。
今回はそのレスポンスを受け取る部分と、友達にガジェットを紹介するための機能の利用方法について解説します。
DataResponseとResponseItem
opensocial.DataRequestで送信したリクエストのレスポンスは、opensocial.DataResponseオブジェクトのインスタンスを引数としてコールバック関数に返ってきます。
opensocial.DataResponseオブジェクトは、バッチで送信した複数のリクエストに対するレスポンスを1つにまとめて返すものです。複数のリクエストの結果、全て成功したのか、それともその中の1つでも失敗したリクエストがあったかを、hadErrorメソッドで確かめることができます。
バッチで送信したリクエストに対する各レスポンスは、リクエスト追加時に付加したキーを使って個別に呼び出すことが出来ます。
ここで得られるopensocial.ResponseItemオブジェクトのインスタンスは、リクエストに対する実際のレスポンス内容を含みます。このオブジェクトのhadErrorメソッドを使うことによって、リクエストごとにエラーが発生したかどうかをチェックすることが可能です。
「opensocial.DataResponseオブジェクトとopensocial.ResponseItemオブジェクトのどちらでエラーチェックを行えばいいの?両方やるの?」と思う方もいらっしゃるかもしれません。使い分けとしては、バッチで送信した複数のリクエストの中に1つでもエラーがあるとNGの場合はopensocial.DataResponse、そうではない場合はopensocial.ResponseItemでチェックするのが定石と覚えておきましょう。
opensocial.ResponseItemオブジェクトのエラーチェックで問題ないことが分かったら、getDataメソッドでリクエストに応じた各種レスポンス内容を受け取ることができます。
プロフィール情報のレスポンス
プロフィール情報のレスポンスで返ってくるのはopensocial.Personオブジェクトです。opensocial.PersonオブジェクトはgetDisplayNameメソッドでニックネームを、getIdメソッドでIDを取得することが出来ます。その他の属性情報については、getFieldメソッドに欲しい情報のフィールド名を渡すことで取得することが出来ます。
ここではてブチェッカーに実装した、OpenSocialとgooホームだからこそ可能なテクニックをひとつご紹介しましょう。
gooホームには、FriendFeedのように外部利用サービスからフィードをインポートする機能があります。リクエストを行う際にPROFILE_DETAILSにURLSも指定を行っておくことにより、予めユーザが設定を行っている外部利用サービスのURLを取得することができます。もちろん、gooホームははてなブックマークにも対応しているため、はてなブックマークのURLも取得することが可能です。
そこで、はてブチェッカーでは、homeビューの「設定」タブからはてなIDを設定しなくても、もし外部利用サービスとしてはてなブックマークのURLが登録されていた場合には、そのURLから抽出したはてなIDを自動的に設定するようにしています。
下記はプロフィール情報からURLを取得して、はてなIDをアプリデータに保存する実際のコードです。
友達一覧のレスポンス
友達一覧のレスポンスで返ってくるのはopensocial.Collectionオブジェクトです。opensocial.Collectionオブジェクトは配列を拡張したオブジェクトで、eachメソッドを使ってイテレートを行ったり、Idの指定によるユーザー情報の取得を行ったりすることが出来ます。各要素はそれぞれopensocial.Personオブジェクトになっているため、ループで回しながら上記で解説したプロフィール情報を扱うやり方で処理を行うことができます。
アプリデータのレスポンス
アプリデータのレスポンスはユーザーIDをキーとしたオブジェクトで返ってきます。今回のサンプルではオーナーの「アプリデータに保存されたはてなID」とオーナーの友達の「アプリデータに保存されたはてなID」の2つをリクエストしましたが、結果がひとつなのか、複数なのかの違いだけで、レスポンスの構造は同じです。for/inループで取得するとよいでしょう。
今回はてブチェッカーでは、アプリデータにはてなIDを保存しています。アプリデータの使いどころや詳しい利用方法については、また別の機会に解説します。
ガジェットを友達に教える
OpenSocial JavaScript APIには、ソーシャルアプリらしい機能のひとつとしてガジェットを友達に紹介するopensocial.requestShareAppメソッドが含まれています。gooホームではopensocial.requestShareAppメソッドを使うと、教えたい友達にガジェットを紹介するメッセージを送信することが出来ます。
はてブチェッカーのhomeビューでは、同じガジェットを使っている友達の新着ブックマークをまとめて表示する機能がありますが、友達に使っている人がいなければ意味がありません。だからといって何も表示しないのも考えものです。そこで、友達にはてブチェッカーを使っている人がいない場合、友達に教えるリンクを表示します。
gooホーム独自の拡張である絵文字フィーチャーを使って少し派手にしてあるのがポイントです。コンテナごとにこういった独自機能が利用できるのも面白い所ですね。
まとめ
さて、今回はDataResponse、ResponseItem、requestShareAppについて解説しました。はてブチェッカーの実際のコードでは、これらの組み合わせで友達のはてなIDを取得、最新のはてなブックマークを取得し、時系列に並べ替えて表示しています。ここに掲載したものより少し複雑ですが、これでOpenSocialの主な機能は使えるようになったはずです。
次回以降は外部APIからデータを取得するmakeRequestや、アプリデータの詳細、少し複雑なパーミッションの話をしていきます。