通过FQL获取用户喜欢的流项目(帖子,评论,图片,链接等)

时间:2011-12-13 22:14:35

标签: facebook facebook-graph-api facebook-like facebook-fql

我需要帮助获得stream items via FQL的用户喜欢。我有一些喜欢回来,但无法弄清楚如何获得其他人。对于access_token,每permission is granted


让我告诉你我能做些什么:

我喜欢 Page Feed的帖子:

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT target_id FROM connection WHERE source_id=me() and is_following=1) AND likes.user_likes=1 LIMIT 10 注意:这是在2011年12月中旬发布原始问题时的工作原理。现在(2012年2月中旬),它不再返回页面中任何喜欢的流内容。

发帖我喜欢我发布的帖子

fql?q=Select post_id, source_id, message FROM stream where source_id=me() AND likes.user_likes=1 LIMIT 10


这是我缺少的

朋友的墙上发布我喜欢的帖子

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT uid1 FROM friend WHERE uid2=me()) AND likes.user_likes=1 & LIMIT 5000

活动的墙上发布我喜欢的帖子

????

群组的墙上我喜欢的帖子

????

7 个答案:

答案 0 :(得分:2)

截至发布时间(2012年10月22日),这是我的想法:

对于朋友/订阅/页面项目:

SELECT likes, post_id, actor_id, target_id, message
FROM stream
WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me())
AND likes.user_likes=1 

OR

来自'like'表:

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

post_id始终为空,并且有时在通过图表API查询时不存在object_id(即graph.facebook.com/OBJECT_ID

对于链接/外部对象 - 没有直接的方法从这里获取Facebook帖子的详细信息,但它返回了很多结果。也许使用另一个查询/多查询在链接表中查找这些网址。

SELECT url
FROM url_like
WHERE user_id=me()

答案 1 :(得分:1)

我找到了使用Open Graph API的解决方案。希望这对你也有帮助吗?

要执行此操作,您需要用户read_stream权限。

如果我的解决方案符合您的要求,请告诉我。

因为FQL不会比V2.0更长,所以我更喜欢使用Open Graph API而不是FQL。

/*
*
*   Count my_user_id likes in wall of user "123"
*
*   ex: url = /123/posts
*   
*   setTimeout to avoid exceed api level rate limit, code 613
*/

function findMyLikes(url,my_user_id,count,callback) {
    console.log(url);
    FB.api(url, function (response) {
        if (response.data) {
            response.data.forEach(function (post) {
                //console.log(post);
                if (post.likes) {
                    post.likes.data.forEach(function (like) {
                        if (like.id == my_user_id) {
                            count++;
                        }
                    });
                }
            });
        }

        if (response.paging && response.paging.next) {
            setTimeout(function() {findMyLikes(response.paging.next,my_user_id,count,callback)},1000);
        } else {
            callback(count);
        }
    });

};

我注意到,如果您要分析非常长的Feed,此解决方案可能需要一些时间。 对于这个问题,我还有一个悬而未决的问题:通过较少的图形API调用获取新闻墙上特定用户的所有喜欢 https://codereview.stackexchange.com/q/58270/50013?sem=2

答案 2 :(得分:0)

Facebook的合作伙伴工程师

@Jeff Sherlockhere '你不能使用fb平台吸引所有人的喜欢。出于隐私原因,我们将其限制为演员,电影,运动队等。'我知道它没有多大意义,因为您可以使用Facebook API查询各种其他内容。我建议你拍照阿什顿库彻并尝试查询他喜欢的桌子......等等,你需要他的许可; ]

答案 3 :(得分:0)

问题是,like表为所有内容返回一个空白的post_id。但是,它会为您的喜欢返回object_id。

您可以将所有这些object_id放在逗号分隔的字符串中,然后使用?ids = objectid1,objectid2,objectid3等提交图形API调用。

然后返回它找到的所有对象。通过这种方式,您可以获得流项目的喜欢。

似乎大约需要4个星期。我似乎无法让它比这更进一步。

顺便说一句,你会发现有一件事是喜欢的评论也会在同一个表中作为object_ids返回。但是,似乎没有任何方法可以找出这些object_ids的对象详细信息。这些有点神秘。

答案 4 :(得分:0)

如果您阅读like表格文档,则post_id字段会显示一条注释:

  

必须从流FQL表中查询这些帖子ID。

因此,当您将post_idpost_id<>""进行比较时,它不会返回任何内容,因为默认结果包含空白的post_id。当你运行以下查询时似乎:

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

它会返回用户喜欢的页面以及其他一些内容,但不会返回Feed帖子。

由于您已经希望从流表中获得喜欢,您只想从流表中获取post_id。要获取某一天的post_id NewsFeed,您可能需要尝试以下查询。

SELECT post_id
FROM stream
WHERE filter_key IN (
    SELECT filter_key
    FROM stream_filter
    WHERE uid=me()
    AND type='newsfeed'
)
AND is_hidden = 0
AND description<>''

您可能希望使用LimitCreated_time字段获取更多编号。的帖子。一旦你在Multi-query中使用上面的查询来获得用户的喜欢,你肯定会在某一天得到喜欢。

答案 5 :(得分:-1)

SELECT post_id, actor_id, message, type, permalink, attachment, likes, 
    comments, description, updated_time, created_time
FROM stream 
WHERE filter_key in (
        SELECT filter_key 
        FROM stream_filter 
        WHERE uid=me() AND type='newsfeed'
)

只需根据您的要求更改类型

答案 6 :(得分:-2)

GraphAPI无法做到这一点。 GraphAPI将允许您查看用户使用/me/likes所喜欢的网页,但它不会为您提供他们喜欢的发布到用户墙上的所有项目的列表。

您可以在Facebook Documentation

中查看相关详细信息

我对您的问题中列出的FQL没有经验,但Stack Overflow问题似乎可以解答您的问题。

请参阅:Facebook API - "All my likes" query

完美地完成了测试。