Search code examples
javaspringspring-socialkotlinspring-social-facebook

Spring Facebook Template map fetchObject to PagedList


I'm using the following approach to return a Facebook user's music preferences:

//FIXME: Fetch results in a single operation
val likes = facebook.likeOperations().music
val artists = ArrayList<Artist>()
for (musicLiked in likes)
{
    val musicProfile = facebook.fetchObject(musicLiked.id, Page::class.java, "id", "name", "genre");
    artists.add(Artist(name = musicProfile.name, genre = musicProfile.genre))
}

The above approach won't scale, since we have an additional network operation for each artist the user likes.

I tried:

I tried using facebook.likeOperations.music however this doesn't fetch genre.

Question:

I would like to use facebook.fetchObject with a query that returns a PagedList. How to do this?

(No need to post example code in Kotlin if you prefer or are more familiar with Java - I'll be happy with information in any language).


Solution

  • Thanks to advice given in @burovmarley's answer, I inspected the source and came up with:

    val music = facebook.fetchConnections(userPage.id, "music", Page::class.java,
                PagingParameters(25, 0, null, null).toMap(), "id,name,,genre")
    for (musicLiked in music)
    {
        println("likes: ${musicLiked.name}, genre: ${musicLiked.genre}")
    }
    

    This allows using Spring Social Facebook as an unmodified dependency, and without issuing a pull request, which seem to be fairly slow in processing through the queue at the present time.