2

我正在使用以下方法返回 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 中发布示例代码 - 我会对任何语言的信息感到满意)

4

2 回答 2

1

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



    me/music?fields=id,genre,name

上面的链接将返回所有喜欢的音乐,带有艺术家/团体的 id、流派和名称。不幸的是,FacebookTemplate 没有适用于您需求的方法。Facebook.likeOperations()方法返回LikeTemplate类的实例,该实例具有带值的常量 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 与一些休息库一起使用
  2. 您可以覆盖 FacebookTemplate 并返回您自己的LikeTemplate实现作为 likeOperations() 方法的结果。LikeTemplate 类的实现在提到的常量中应该有不同的值(在字符串末尾添加了流派字段)

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

于 2015-11-02T23:37:04.117 回答
1

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

于 2015-11-07T03:47:20.017 回答