Spring的Facebook模板映射fetchObject到PagedList

我正在使用以下方法来返回Facebook用户的音乐首选项:

//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)) } 

上述方法不会缩放,因为我们对每个用户喜欢的艺术家都有一个额外的网络操作。

我试过了:

我试图使用facebook.likeOperations.music但是这不会获取流派。

题:

我想用facebook.fetchObject与返回一个PagedList的查询。 如何做到这一点?

(如果您愿意或者对Java更熟悉,不需要在Kotlin中发布示例代码 – 我将很乐意使用任何语言的信息)

Facebook api在请求中使用“fields”参数来返回对象的自定义字段。 该参数也可用于喜欢的音乐休息请求。

 me/music?fields=id,genre,name 

以上链接将返回所有喜欢的音乐与艺术家/组的名称,流派和名称。 不幸的是,FacebookTemplate没有适用于您的需求的方法。 方法Facebook.likeOperations()返回具有常量PAGE_FIELDS的LikeTemplate类的实例

 private static final String PAGE_FIELDS = "id,name,category,description,location,website,picture,phone,affiliation,company_overview,likes,checkins"; 

在上面的常数中,你没有体裁领域。 所以你有两种方法:

  1. 你可以简单地使用一些休息库的Facebook休息API
  2. 您可以覆盖FacebookTemplate并返回LikeOemrations()方法的LikeTemplate实现。 LikeTemplate类的实现应该在提到的常量(字符串末尾添加的流派字段)中具有不同的值,

也许有人会更有帮助,但据我所知,你没有其他选择。

感谢@ burovmarley的回答给出的建议,我检查了来源,并提出:

 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}") } 

这允许使用Spring社交Facebook作为一个未修改的依赖项,并且不会发出拉取请求,而目前在队列处理上似乎相当缓慢。