Spring Facebook 模板将 fetchObject 映射到 PagedList

Spring Facebook Template map fetchObject to PagedList

我正在使用以下方法 return 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 用于 return 是 PagedList 的查询。这该怎么做?

(如果您喜欢或更熟悉 Java,则无需 post Kotlin 中的示例代码 - 我会对任何语言的信息感到满意)

Facebook api 在对对象的 return 自定义字段的请求中使用 "fields" 参数。此参数也可用于喜欢的音乐休息请求。



    me/music?fields=id,genre,name

以上 link 将 return 所有喜欢的音乐,其 ID、流派和名称为 artist/group。不幸的是,FacebookTemplate 没有适用于您需要的方法。方法 Facebook.likeOperations() returns instance of the LikeTemplate class 具有常量 PAGE_FIELDS 和值



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

在上面的常量中你没有流派字段。所以你有两种方法:

  1. 您可以简单地使用 facebook rest api 和一些 rest 库
  2. 您可以覆盖 FacebookTemplate 和 return 您自己的 LikeTemplate 实现作为 likeOperations() 方法的结果。 LikeTemplate class 的实现在提到的常量中应该有不同的值(在字符串末尾添加类型字段)

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

感谢@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 作为未修改的依赖项,并且无需发出拉取请求,这在目前通过队列处理似乎相当慢。