I needed to write the following sample of code to test fetching people by ID number. This is an interesting sample because it demonstrates handling an error condition - namely, the "unauthorized" response that you should get when you try to access an account that you don't have permission to request. On orkut, this means people who don't have your app installed, even if they're your friends.
The following runs in DAfOS:

On orkut, if a user doesn't have DAfOS installed, you'll get an "unauthorized" error:

In your applications, make sure to handle cases like this, since you won't always be able to guarantee that all containers will have the same policies around which user accounts you may directly access.
The following runs in DAfOS:
function onPersonGot(result) {
var response = result.get("person");
if (response.hadError()) {
output("There was a problem fetching this user: " +
response.getErrorCode());
} else {
output("Fetched " +
result.get("person").getData().getDisplayName());
}
gadgets.window.adjustHeight();
};
function closeGetPerson(id) {
return function() {
var params = {};
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(id, params), "person");
req.send(onPersonGot);
};
};
function closePrintFriend(list) {
return function(friend) {
var item = document.createElement("li");
var link = document.createElement("a");
var text = document.createTextNode(friend.getDisplayName());
list.appendChild(item);
item.appendChild(link);
item.appendChild(document.createTextNode(" [" +
friend.getId() + "]"));
link.appendChild(text);
link.onclick = closeGetPerson(friend.getId());
link.href = "javascript:void(0);";
};
};
function gotFriends(data) {
var friends = data.get("of").getData();
var list = document.createElement("ul");
var main = document.getElementById("dom_handle")
main.innerHTML = "";
main.appendChild(list);
friends.each(closePrintFriend(list));
gadgets.window.adjustHeight();
};
function getFriends() {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.MAX] = 1000;
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(
opensocial.DataRequest.Group.OWNER_FRIENDS, params), "of");
req.send(gotFriends);
};
getFriends();Note that the example lists the friends of the owner as links. Clicking on each name will attempt to retrieve that user by ID number. On orkut, if a user doesn't have DAfOS installed, you'll get an "unauthorized" error:

In your applications, make sure to handle cases like this, since you won't always be able to guarantee that all containers will have the same policies around which user accounts you may directly access.

Leave a comment