使用Graph API检索Facebook帖子评论

43

我尝试使用以下代码获取Facebook评论:

http://graph.facebook.com/[post_id]/comments

只显示了15个评论中的2个,并且没有count信息。

{
    "data": [
        {
            "id": "[post_id]",
            "from": {
                "name": "[name]",
                "id": "[id]"
             },
             "message": "[message]",
             "created_time": "2011-01-23T02:36:23+0000"
        },
        {
             "id": "[id]",
             "from": {
             "name": "[name]",
                 "id": "[id]"
             },
            "message": "[message]",
            "created_time": "2011-01-23T05:16:56+0000"
        }
    ]
}

有人知道为什么只有2条评论吗?

另外,我想检索(默认数量的)评论或检索具有我的限制数量的评论,并获取其评论计数。有任何想法吗?(请使用Graph API)。


嗨,杰弗里,你能否提供一个具有此行为的示例帖子?我检查了几篇帖子,API总是返回所有评论。请确保提供正确的“Post_ID”。 - Bartek
1
@JeaffreyGilbert,请问我该如何获取帖子的Post_ID以获取评论呢?请给我建议,我想在我的应用程序中使用相同的功能。 - Harshal Kalavadiya
10个回答

40

您需要从安全请求https中调用它,并提供一个access_token

https://graph.facebook.com/19292868552_118464504835613/comments?access_token=XXX

编辑:
根据post文档添加了对象。尝试点击评论连接,然后删除access_token并查看差异。


access_token需要fb应用程序吗?我不想让人们必须先授权我的应用程序,除非他们想发表评论。我走对了方向吗? - Jeaf Gilbert
4
只要他们在评论你拥有的东西,就不需要授权你的应用程序或与之交互。你只需要获得授权...所以 access_token 是你的。 - ifaour
1
不,如果您没有登录,您就不会知道是否拥有某个东西。我认为他需要创建一个应用程序ID,并要求用户先登录和授权。 - Enrico Susatyo
抱歉,我误读了……如果您拥有的是公共内容,即使您未经授权,也可以查看。但是,您是否仍然需要获得授权才能发表任何评论呢? - Enrico Susatyo
你好,感谢您的回答。我使用了您的代码并成功获取了帖子的评论和点赞。但是,我有一个问题。由于我是从网站端读取评论和点赞,那么我应该在哪里获取access_token呢?所以,我找到了一个解决方案,即appid|app_secret将作为access_token。但是这里它们不起作用。我也不能将应用程序生成的access_token保存在服务器端。因为根据Facebook文档,它将在60天后过期。请给我建议。提前致谢。 - Ashok Singhal
显示剩余2条评论

5
为了获取“点赞”计数和“评论”计数,您需要使用“PostOwnerID”和“PostID”的组合,而不仅仅是“PostID”。
所以对于您的示例,应该是:
https://graph.facebook.com/153125724720582_184234384932460/comments
再次提醒,在一些其他答案中提到,您需要使用“https”方法以及一个“auth_token”。

我从哪里可以获取PostIDPostOwnerID - DMEM

4

在乌尔都语中有一个词叫做JUGAAR,意思是找到一条出路,只是为了完成任务。所以我为了这个目的做了这个JUGAAR,希望它能够帮助到你。

$contents = file_get_contents("http://graph.facebook.com/" . $_GET['id'] . "/likes");
if (substr_count($contents, 'name')>0) {
    echo substr_count($contents, 'name') . " people like this album";
}

顺便说一下,我对这个 Fb 的东西也很新奇,我正在寻求帮助来发布评论。当我尝试使用 graph.api./id/comments?access_token=sdfsfsdf&message="D" 时,它仍然返回 id 的评论,而不是发布评论。


4

我也遇到了评论的问题。问题在于我使用的是测试用户的访问令牌。因为测试用户无法访问其他FB用户的信息,所以只显示了来自页面的评论。


3

作为一项合理性检查,您是否拥有“读取动态”权限?我可以使用使用“读取动态”访问令牌看到完整的评论。正如其他人所提到的那样,您还必须使用 HTTPS 和访问令牌...


1

只显示了15条评论中的2条。

在URL中添加一个限制参数:

 http://graph.facebook.com/[post_id]/comments?limit=1000&access_token=XXX

这应该显示所有的评论。

1

成功登录后调用此方法facebookComments()

parameters.putString("fields", "message"); .............// 这很重要

 AccessToken accessToken = AccessToken.getCurrentAccessToken();
    public void facebookComments() {
        try {
            getFriends(accessToken, new GraphRequest.Callback() {
                        public void onCompleted(GraphResponse response) {
                            Log.e("keshav", "one" + response);
                            CommonMethod.showAlert("res  --> " + response, MainActivity.this);
                        }
                    }
            );
        } catch (Exception e) {
            CommonMethod.showAlert("Exception is -> " + e, MainActivity.this);
        }
    }

    public void getFriends(AccessToken token, GraphRequest.Callback callback)
    {
        // TODO Comments Working but id return only
        GraphRequest requestt = new GraphRequest(token, "744511125731315_751199848395776/comments",
                null, HttpMethod.GET, callback);
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id");           // todo in use imp
        parameters.putString("fields", "name");           // todo in use imp
        parameters.putString("fields", "from");           // todo in use imp
        parameters.putString("fields", "message");           // todo in use imp
        requestt.setParameters(parameters);
        requestt.executeAsync();
    }

1

你可以像这样做,避免所有评论计数问题:

  1. 获取对象的(在Graph API中,一个帖子被认为是一个对象)ID-根据你的问题,我了解到你已经有了它?
  2. 使用此ID创建评论社交插件,并获取其代码。
  3. 将代码嵌入您的网站中。

这将导致所有该对象的评论。

要获取每个对象的评论计数,您可以执行fql查询,类似于以下内容:

SELECT comments FROM stream WHERE post_id = [yourpostid]

这将在计数参数下的评论数组中返回此对象的计数。


请问如何获取文章的 post_id 以便获取评论?请给我建议! - Harshal Kalavadiya
1
使用此代码片段进行开发测试var body = '阅读JS SDK文档'; FB.api('/me/feed', 'post', { message: body }, function(response) { if (!response || response.error) { alert('出现错误'); } else { alert('帖子ID:' + response.id); } }); - Ajay Takur

1
尝试通过应用程序登录(http://developers.facebook.com/docs/authentication)进行身份验证,然后使用access_token参数调用GraphAPI。

1

在这种情况下,SELECT comments FROM stream WHERE post_id = [yourpostid] 将不起作用。

成功使用应用程序的访问令牌在用户的墙上发布后返回的 ID 的格式为 abcdef_qwerty(下划线分隔的 ID),而映射到评论表的 post_id 中的帖子 ID 的格式为“lmnop”。

要获取形式为“abcdef_qwerty”的此帖子 ID 上的赞和评论计数,似乎只有使用应用程序生成的访问令牌进行图形调用才是唯一的解决方案。

类似于: https://graph.facebook.com/100002619172565_117323155031656?access_token=xxxxxxxxxxxxx


我该如何获取100002619172565_117323155031656这样的ID以获取所有评论? - Harshal Kalavadiya
使用Graph API在用户的墙上发布内容后,您会收到此响应。 - mjs

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