Facebook图形API评论计数

21

看起来Facebook改变了帖子结果,几周前可以直接从帖子中读取评论计数

https://graph.facebook.com/125909647492772_502974003098530

你会得到类似这样的东西

...
"comments": {
"data": [
  {
    "id": "502974003098530_78616446", 
    "from": {
      "name": "Mathias Fritz", 
      "id": "526559276"
    }, 
    "message": "saugeil!", 
    "can_remove": false, 
    "created_time": "2013-03-26T14:58:01+0000", 
    "like_count": 1, 
    "user_likes": false
  }
], 
"paging": {
  "cursors": {
    "after": "MQ==", 
    "before": "MQ=="
  }
}, 
"count": 1

但现在计数丢失了。

我在图形文档中进行了一些研究,但在那个方向上唯一的变化似乎是现在可以对评论进行评论...并且这些评论在名为comment_count的字段中计数。

是否仍有一种方法可以获取总评论数?


1
这仍然可以通过FQL实现,请查看这个问题的答案:http://stackoverflow.com/questions/14371949/facebook-api-comment-count-via-fql - Cormac Driver
1
非常感谢!SELECT comment_info FROM stream WHERE post_id = ... 是有效的。如果您发布答案,我可以接受它。 - fuchs777
@fuchs777 你好,我该如何获取你使用的像“125909647492772_502974003098530”这样的postId? - Harshal Kalavadiya
@HarshalKalavadiya,获取帖子ID有几种不同的方法,具体取决于您的方法,只需在谷歌上搜索“Facebook帖子ID”即可。 - fuchs777
9个回答

34

1
非常感谢这个解决方案。这应该是被采纳的答案。 - Vishnu Sureshkumar
确实。到目前为止,这是我发现的唯一一种在没有访问令牌的情况下获取点赞/评论总数而无需浏览所有结果的方法。谢谢! - jel
2
还有另一个答案展示了如何通过在列表页面上使用"?fields=likes.summary(true)"来完成此操作,而不是逐个获取每篇帖子的详细信息。 - Kevin

22

我曾经遇到同样的问题,只需在 "fields" 参数中添加 likes.summary(true),comments.summary(true) 即可解决。

例如,我使用了 https://graph.facebook.com/me/feed?access_token=ACCESS_TOKEN&fields=story,from,story_tags,likes.summary(true),comments.summary(true)

而不是 https://graph.facebook.com/me/feed?access_token=ACCESS_TOKEN

如果需要,您也可以添加其他参数,用逗号隔开即可。


1
你为我节省了几个小时的时间。非常感谢! - Oleksandr Samsonov

16
< p > summary=true 是您要寻找的内容

获得点赞数:

114916098537132_1265715836790480/likes?summary=true

获取评论数量

114916098537132_1265715836790480/comments?summary=true

获取分享次数:

114916098537132_1265715836790480?fields=shares

最后[将所有三个组合起来]

114916098537132_1265715836790480?fields=shares,likes.summary(true),comments.summary(true)

改进版 (在删除“喜欢”的列表并仅获取摘要时添加了limit(0)):

114916098537132_1265715836790480?fields=shares,likes.limit(0).summary(true),comments.limit(0).summary(true)

有没有办法获取有关分享者、分享时间的详细信息,就像对喜欢和评论一样可以做到那样? - emir
@emir 抱歉伙计,我不知道那个 :) - Abhishek Goel
嗨 @AbhishekGoel,我用了最后一个版本,但只有股份的数字正确,评论和点赞的数字总是较少。你有什么想法吗? - Amit Yadav

8

这对我完美地起作用:

fields=shares,created_time,comments.summary(true).limit(0)

这将返回summary处的评论计数,并同时返回0条评论,这非常完美,因为你只需要评论计数。

你是我的英雄。 - rlfrahm

5

您可以通过 FQL 获取评论总数。请参考下面的问题:

Facebook API - comment count via FQL

这里是您需要的查询语句:SELECT comment_info FROM stream WHERE post_id = ...


是的,这仍然有效。听起来你可能遇到了权限问题。确保你已经请求了read_stream权限。 - Cormac Driver
这是由于fb流对象的行为而导致的不完整数据。您必须使用“limit”和“order by”才能正确使用它。我更喜欢Veerle Struyf的解决方案。 - nils petersohn
7
FB刚刚宣布,FQL已被弃用,并在接下来的几个API发布之后将不再可用。 - James Alexander
1
请将已采纳的答案更改为@Veerle Struyf的答案。该方法现已弃用。 - Nic Strong
抱歉,我已经不再使用 Facebook API 参与该项目,因此我对这个问题失去了追踪。答案似乎是正确的,所以我更改了采纳的答案。感谢 @NicStrong 提供的信息。 - fuchs777

3
如果您想在Facebook上计算所有内容的数量。 (该数字对Facebook用户可见)
您应该使用FQL(Facebook查询语言)而不是Graph API。 Facebook查询语言参考 这种情况下,您应该进行查询。
SELECT comment_info FROM stream WHERE post_id = ...

3

您可以进行此类请求:

{pageid}/posts?fields=comments.summary(1){id}

它将返回包含每篇帖子的评论计数的帖子列表。 在这里,我只返回了评论ID,因为我只需要每篇帖子的评论数量,但是当然您可以包括许多其他字段:

{pageid}/posts?fields=comments.summary(1){id,message},id


-1

请尝试以下操作:

{
    "data": [
        {
            "id": "447235535389660_1226199",
            "from": {
                "name": "Harjeet Walia",
                "id": "100004980601083"
            },
            "message": "Price",
            "can_remove": false,
            "created_time": "2013-09-06T10:39:01+0000",
            "like_count": 0,
            "user_likes": false
        },
        {
            "id": "447235535389660_1226152",
            "from": {
                "name": "Shoba Dhyani Jakhmola",
                "id": "100000906896060"
            },
            "message": "baap re kitna mehnga !",
            "can_remove": false,
            "created_time": "2013-09-06T10:05:09+0000",
            "like_count": 0,
            "user_likes": false
        }
    ],
    "paging": {
        "cursors": {
            "after": "MQ==",
            "before": "NA=="
        }
    }
}

那么

int commentCount = <JsonNode Var with above data>.path("comments").path("data").size();

这里的commentCount将会给出评论数量。


-1

或者为了对您现有的代码进行较少的更改,可以使用:

    $.each(json.data,function(i,fb){
    ...
       var commentsCount = 0
       if(fb.comments!=undefined){
          commentsCount=fb.comments.data.length
       }
    ...
    }

commentsCount保存了当前子元素的评论数量


2
这样做效果不佳,因为您得到的是分页评论。每次调用只能获取25条评论,之后您需要调用下一页。 - fuchs777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接