前回は、
今回はそのレスポンスを受け取る部分と、
DataResponseとResponseItem
opensocial.
opensocial.
function callback(response) {
if (response.hadError()) {
// ひとつでもエラーがある場合は中止する処理
} else {
// エラーがなければ継続する処理
}
}
バッチで送信したリクエストに対する各レスポンスは、
var result = response.get('friends');
ここで得られるopensocial.
if (result.hadError()) {
// エラーがあればメッセージを表示する処理
} else {
// エラーがなければ継続する処理
}
「opensocial.
opensocial.
プロフィール情報のレスポンス
プロフィール情報のレスポンスで返ってくるのはopensocial.
var person = result.getData();
// ニックネームを取得
var name = person.getDisplayName();
// gooIDを取得
var id = person.getId();
// プロフィールアイコンのURLを取得
var icon = person.getField(opensocial.Person.Field.THUMBNAIL_URL);
// 予めPROFILE_DETAILSで指定をしていたため、関連URLを取得することができる
var urls = person.getField(opensocial.Person.Field.URLS);
ここではてブチェッカーに実装した、
gooホームには、
そこで、
下記はプロフィール情報からURLを取得して、
var owner = result.getData();
// オーナーのプロフィールからはてなIDを抽出する処理
if (owner.getField(opensocial.Person.Field.URLS)) {
var urls = owner.getField(opensocial.Person.Field.URLS);
// 取得したURLSをループ
for (var key in urls) {
var url = urls[key].getField(opensocial.Url.Field.ADDRESS);
// プロフィール情報にはてブURLが含まれ、アプリデータにまだIDが保存されていない場合
// プロフィール情報のはてブURLからはてなIDを補完して保存する
if (url.match(/^http:\/\/b\.hatena\.ne\.jp/) && hatena_id == '') {
hatena_id = url.replace(/^http:\/\/b\.hatena\.ne\.jp\/(.*?)\/.*$/, '$1');
// その場でアプリデータに保存
var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'id', hatena_id));
req.send();
}
}
}
友達一覧のレスポンス
友達一覧のレスポンスで返ってくるのはopensocial.
var friends = result.getData();
// Collectionオブジェクトのためeachループが使える
friends.each(function(friend) {
// ニックネームを取得
var name = friend.getDisplayName();
// gooIDを取得
var id = friend.getId();
// プロフィールアイコンのURLを取得
var icon = friend.getField(opensocial.Person.Field.THUMBNAIL_URL);
});
アプリデータのレスポンス
アプリデータのレスポンスはユーザーIDをキーとしたオブジェクトで返ってきます。今回のサンプルではオーナーの
var appdata = result.getData();
// for/inループでイテレート
for (var userid in appdata) {
// ユーザーIDをキーにデータを取得する
var data = appdata[userid];
}
今回はてブチェッカーでは、
ガジェットを友達に教える
OpenSocial JavaScript APIには、
はてブチェッカーのhomeビューでは、

// 絵文字変換
var tpl = goohome.Emoji.convert('{/m_0151/}はてブチェッカーを友達に教える{/m_0204/}');
var inv = document.getElementById('invitation')
inv.innerHTML = tpl;
// onclickイベントを追加
inv.onclick = function() {
// ガジェットを友達に教えるリクエスト
opensocial.requestShareApp(
'VIEWER_FRIENDS',
opensocial.newMessage('はてブチェッカーを使ってみませんか?')
);
};
gooホーム独自の拡張である絵文字フィーチャーを使って少し派手にしてあるのがポイントです。コンテナごとにこういった独自機能が利用できるのも面白い所ですね。

まとめ
さて、
次回以降は外部APIからデータを取得するmakeRequestや、