Facebook评论ID问题

jac*_*bot 8 javascript php facebook facebook-graph-api

我在Facebook应用程序上使用FBML的fb:comments插件(虽然它在Facebook开发者网站上被描述为"遗留"),似乎是在Canvas应用程序上获得正确的Facebook评论集成的唯一方法吗?如果有的话,请告诉我.我错了,似乎在开放海洋中航行比浏览Facebook文档更容易.我也使用JavaScript SDK订阅comment.create活动,这样我就可以跟踪谁在我的网页上发表评论.很容易,这似乎在一定程度上工作,但我有以下代码:

    FB.Event.subscribe('comment.create', function(response) {
        console.log(response);
    });
Run Code Online (Sandbox Code Playgroud)

这将返回一个很好的JSON对象,包括以下的块:

commentID: "10150576473610309"
Run Code Online (Sandbox Code Playgroud)

大!我有一个评论ID.所以现在我转到Facebook图形API以获取有关此评论的更多信息(我想要文本,作者等),所以我在PHP中发布以下内容,因为根据Facebook文档,Facebook上的所有内容都有唯一ID,只需使用此ID启动Graph API即可获得一些甜蜜信息.

file_get_contents('http://graph.facebook.com/10150576473610309');
Run Code Online (Sandbox Code Playgroud)

不好了!这返回false.这很奇怪.所以我查看API以获取与特定页面相关的所有评论,这给了我一个评论列表......但是我刚刚添加的评论的ID是不同的,现在它的格式如下:

"id": "10150576473610309_20003210"
Run Code Online (Sandbox Code Playgroud)

什么是这个额外的下划线和数字?!使用此评论ID调用图形API会给我评论信息!这个新ID出现在哪里以及如何(以及为什么?)?(当然我尝试了Facebook开发论坛,但似乎问我的鼠标同样的问题会取得类似的结果).

Oli*_*ier 7

编辑13/06/2014:注意,用户名字段现已弃用(感谢@ Cyril-n)

感谢Jonathan和Tarmo我开发了一个混合的approch:

FB.Event.subscribe('comment.create',
    function(response) {
        var commentQuery = FB.Data.query("SELECT text, fromid FROM comment WHERE post_fbid='"+response.commentID+"' AND object_id IN (SELECT comments_fbid FROM link_stat WHERE url='"+response.href+"')");
        var userQuery = FB.Data.query("SELECT name FROM user WHERE uid in (select fromid from {0})", commentQuery);

        FB.Data.waitOn([commentQuery, userQuery], function() {
            var commentRow = commentQuery.value[0];
            var userRow = userQuery.value[0];
            console.log(userRow.name+" (id: "+commentRow.fromid+") posted the comment: "+commentRow.text);
        });
    }
);
Run Code Online (Sandbox Code Playgroud)

有了这个,您将获得上次发布的评论所需的所有信息.

PS:表注释中有一个名为'username'的字段(http://developers.facebook.com/docs/reference/fql/comment/),但它似乎不起作用(它表示用户名"匿名用户"当它不是匿名的......这就是我使用第二个查询来获取用户信息的原因)


Dan*_*yKK 4

现在这是从评论框中获取评论的首选方式:

http://developers.facebook.com/blog/post/490

无论如何,关于你的问题。我发现 Facebook 每当推出新平台时都会添加一个 ID。例如,FQL、图形 api 和旧的 REST API 的对象 id 都是不同的。要查看此操作的实际情况,请查看相册中的照片。所有这些由下划线分隔的 id 是:图形 api id、FQL 辅助、照片图形 api 唯一 id,以及一些其他可能的 id,具体取决于上传者。在你的评论之后添加的那些神秘数字只是你的应用程序或一组应用程序的某种评论计数器,基本上没有用。

因此,根据我的经验,混合 Facebook 平台总是一个坏主意,涉及大量的实验和黑客攻击。如果可以始终使用单一平台,那么图形 API 是目前最好的选择。