Javascript 通过id获取facebook评论

Javascript 通过id获取facebook评论,javascript,facebook,facebook-graph-api,facebook-fql,Javascript,Facebook,Facebook Graph Api,Facebook Fql,我有facebook评论框。当用户评论某个内容时,我想将该评论存储在数据库中。因此,我附加了一个带有FB.event.subscribe的回调函数('comment.create',…从那里我可以得到commentID和href,但获得确切评论的唯一方法是使用FQL,该软件从2011年起就被弃用,没有人知道facebook何时会删除它。使用Graph API,我可以获得所有评论,但无法找出哪个评论属于我们应用程序的特定用户(我们不要求任何权限,因此没有访问令牌;当有人发表评论时,我们会触发弹出表

我有facebook评论框。当用户评论某个内容时,我想将该评论存储在数据库中。因此,我附加了一个带有
FB.event.subscribe的回调函数('comment.create',…
从那里我可以得到
commentID
href
,但获得确切评论的唯一方法是使用FQL,该软件从2011年起就被弃用,没有人知道facebook何时会删除它。使用Graph API,我可以获得所有评论,但无法找出哪个评论属于我们应用程序的特定用户(我们不要求任何权限,因此没有访问令牌;当有人发表评论时,我们会触发弹出表单,因此将用户详细信息与评论匹配非常重要(这就是为什么我们订阅
comment.create
))。是否有一种聪明的方法来做到这一点,或者应该依赖不推荐的功能

编辑:

我试图得到这样的评论:

FB.api(
        {
            method: 'fql.query',
            query: "SELECT text, fromid FROM comment WHERE post_fbid = '" + resp.commentID +
                "' AND object_id IN (SELECT comments_fbid FROM link_stat WHERE url='" + resp.href + "')"
        },
        function (data) {
            var fb_id
                , comment

            console.log(data)

            if ( data.length == 1 ) {
                fb_id = data[0].fromid
                comment = data[0].text
            }

        // ...


    }
)

问题是,当在localhost上时,它返回带有一个元素的数组-我想要的注释。当我上传到我的应用程序时,它返回不带元素的数组。可能存在权限问题。我的问题是如何在提交时获取注释的内容。规范的方法是什么?在没有访问令牌和权限的情况下是否可能?

FQL并没有被弃用。这篇博文讨论的是Rest API,特别是后来它声明了FQL的变化

要访问评论,您需要一个可以查看顶级对象的有效访问令牌。假设这只是针对网站上的评论,那么一个普通的扩展页面访问令牌应该足以满足以下场景5中的说明

使用终结点和前面介绍的步骤将短期用户访问令牌交换为长期访问令牌。通过使用长期用户访问令牌,查询[user ID]/accounts终结点现在将为用户管理的页面提供不会过期的页面访问令牌

然后使用[User ID]/accounts中的页面访问令牌,您可以通过服务器端语言(例如使用PHP SDK的PHP)将其硬编码(您可以创建自己的后端登录工具,以防有一天令牌失效或需要更改它)

$facebook->setAccessToken('YOUR_PAGE_TOKEN');
因此,您可以从这里向加载SDK的PHP页面发送AJAX帖子

window.fbAsyncInit = function(){
FB.Event.subscribe('comment.create',
    function(response) {
        onCommentCreate(response.commentID);
    }
);

function onCommentCreate(commentID) {
    $.ajax({
        type: 'POST',
        url: 'createcomment.php',
        data: {commentid:commentID},
        success: function(result)
        {
            alert(result);
        }
    });
}

}
并从那里请求评论信息

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['commentid'] ))  {

$commentid = $_POST['commentid'];

require 'facebook.php';

$facebook = new Facebook(array(
    'appId'  => 'APP_ID_HERE',
    'secret' => 'APP_SECRET_HERE',
));

$facebook->setAccessToken('YOUR_PAGE_TOKEN');

$response = $facebook->api($commentid);

echo $response['from']['id'];

}
?>

参考资料


为什么你认为FQL不受欢迎?事实并非如此,id可以通过FQL和Graph API进行检索-你的问题不是很清楚,你是否试图通过comments插件检索为URL发布的评论?
/comments?id=
应该在图形APIWith
/comments?id=…
中这样做,我可以获取所有评论。我想从
comment.create
event中只设置带有
commentID
的注释。我读了这篇文章:但可能我的印象不好?难道
/
不直接起作用吗?你是什么意思?
http://graph.facebook.com/
不起作用。它会抛出
图形MethodException
。嘿,谢谢你的回答。我差一点就明白了它。我仍然觉得唯一困难的部分是——要获取哪些令牌以及如何准确获取?我已经读到
Comment
object使用通用访问令牌?问题是当我获取通用访问令牌
https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET& 授予\类型=客户\凭证
和t当尝试扩展它时-它以“未指定用户访问令牌”作为响应@cldy page tokens,generic access tokens表示用户或页面令牌。App access tokens(使用此端点
https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secr‌​et=您的应用程序\机密和授权\类型=客户端\凭据
)不算。您必须扩展一个用户令牌,然后像我前面所说的那样获得一个页面令牌。我感到困惑,因为我真的不明白为什么我需要页面访问令牌?我去了
https://developers.facebook.com/tools/explorer
选中应用程序,选中管理页面权限;获取令牌;然后
/me/accounts
;我看到访问权限同意我拥有的页面。但是我应该选择哪一个,为什么我需要这个访问令牌?我使用
.fb comments
类和
data href
属性(来自HTML 5示例)触发注释。我可以问你运行示例应该采取的确切步骤吗?我没有获得访问令牌部分(另一部分很清楚)@cldy comments对象需要一个访问令牌来请求资源。获取该资源的唯一方法是用户或页面令牌。鉴于您最有可能希望不确定地访问comment对象,如果您使用前面提到的场景5,您将被授予一个不会过期的页面访问令牌。整个createcomment.php已被禁用ove和我已经在上列出了html部分。无论你是使用HTML5还是FBML,
FB.event.subscribe
都是相同的功能谢谢你,伙计,这有点违反直觉,但最终实现了。步骤是:1)转到这里2)添加管理页面并选择应用程序。3)按照你的说明-获取用户令牌(有效期为一小时)4)获得扩展访问权\u令牌5)获得/me/accounts 6)选择了某个页面-访问令牌没有过期日期。
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST['commentid'] ))  {

$commentid = $_POST['commentid'];

require 'facebook.php';

$facebook = new Facebook(array(
    'appId'  => 'APP_ID_HERE',
    'secret' => 'APP_SECRET_HERE',
));

$facebook->setAccessToken('YOUR_PAGE_TOKEN');

$response = $facebook->api($commentid);

echo $response['from']['id'];

}
?>