Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing data from response of FB.api()

Tags:

facebook

I am having difficulty accessing the returned JSON response data from the new Facebook JS SDK new Graph API calls.

For instance, in some of their docs where they are using the old way of using the SDK , they get a pointer to the data by response[0]

but here, it's showing that you need to use response.data[0] instead: http://developers.facebook.com/tools/console/ (click on fb.api — photo-albums)

So which is it? I know that with my code below, if I try using response[0] type of syntax to get at the returned JSON I get undefined.

If I use response[0].length I also get undefined

But if I try response.data[0].length I get 2 which I guess is the returned JSON or my 2 albums..I just don't know how to play with this returned object in terms of syntax and manipulating it, its properties, etc.

I want to in the end parse out the returned JSON using the jQuery parseJSON method but have no clue how to even pass the right syntax here for the response and just use that response object.

FB.api(uri, function(response)
{
    alert("response: " + response);

    // check for a valid response
    if (response == "undefined" || response == null || !response || response.error)
    {
        alert("error occured");
        return;
    }

    alert("response length: " + response.data.length);
}

this alert gave me 2 which makes sense. I have 2 albums.

then I tried something like response.data[0] and tried a jQuery parseJSON(response.data) or parseJSON(response.data[0]) on that and it does not work. So can someone explain the response object here as in regards to Facebook I guess? I see no docs about how to use that returned object at all and how it's constructed.

UPDATED:

Ok, so here's the entire parsing method attempt that I've stubbed out so far. I don't know if the jQuery parsing is 100% good code yet, I sort of stubbed that out but I can't even test that until I figure out how to use this response object coming back. I know it is returning JSON because I parsed another facebook response object in another method in the JS SDK so pretty sure that response[0] or response.data[0] will give you the JSON string.

function GetAllFacebookAlbums(userID, accessToken)
{
    alert("inside GetAllFacebookAlbums(userID, acessToken)");

    var dFacebookAlbums = {}; // dictionary
    var uri = "/" + userID + "/albums?access_token=" + accessToken;
    //var uri = "/me/albums";

    alert("get albums uri: " + uri);

    FB.api(uri, function(response) 
    {
        alert("response: " + response);

        // check for a valid response
        if (response == "undefined" || response == null || !response || response.error) 
        {
            alert("error occured");
            return;
        }

        alert("response length: " + response.data.length);

        for (var i=0, l=response.data.length; i<l; i++)
        {
            alert("response[key]: " + response.data[i].Name);
        }

        // parse JSON from response
        var dJSONObjects = jQuery.parseJSON(response.data);

        alert("dJSONObjects: " + dJSONObjects);

        if (dJSONObjects.length == 0)
            return;

        // iterate through the dictionary of returned JSON objects 
        // and transform each to a custom facebookAlbum object
        // then add each new FacebookAlbum to the final dictionary 
        // that will return a set of facebookAlbums
        $.each(json.attributes, function () {
            // add a new album to the dictionary
            aFacebookAlbums[i] = FacebookAlbum(
                                                jsonObject["id"],
                                                jsonObject["name"],
                                                jsonObject["location"],
                                                jsonObject["count"],
                                                jsonObject["link"]
                                              );
        });
    });

    return dFacebookAlbums;
}
like image 427
PositiveGuy Avatar asked Jul 26 '10 14:07

PositiveGuy


People also ask

How do I get data from Facebook Graph API?

Open the Graph Explorer in a new browser window. This allows you to execute the examples as you read this tutorial. The explorer loads with a default query with the GET method, the lastest version of the Graph API, the /me node and the id and name fields in the Query String Field, and your Facebook App.


1 Answers

It depends on the API being used. For the new Graph API single objects come back as top level object: http://graph.facebook.com/naitik -- where as collections come back with a top level data property which is an Array: http://graph.facebook.com/zuck/feed. There's also introspection to make things somewhat easier: http://developers.facebook.com/docs/api#introspection. FQL is the other popular API call, and this is where the top level response is array (think rows in SQL) which is why some examples use response[0]. Easiest thing is to just look at the response in your browser or via curl and see what it looks like.

like image 134
daaku Avatar answered Oct 03 '22 01:10

daaku