通过id获取facebook评论

Get facebook comment by id

本文关键字:评论 facebook 获取 id 通过      更新时间:2023-09-26

我有facebook评论框。当用户评论某个内容时,我想将评论存储在数据库中。所以我附加了一个带有FB.event.subscribe('comment.create', ...的回调函数。从那里我得到了commentIDhref,但获得确切评论的唯一方法是使用FQL,它从2011年开始被弃用,没有人知道facebook什么时候会删除它。使用Graph API,我可以获得所有评论,但无法确定哪条评论属于我们应用程序的特定用户(我们不要求任何权限,因此没有access_token;当有人评论时,我们会触发弹出表单,因此将用户详细信息与评论相匹配非常重要(这就是我们订阅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上时,它返回带有一个元素的数组——我想要的注释。当我上传到我的应用程序时,它会返回不带元素的数组。也许存在权限问题。我的问题是如何在提交时获得评论的内容。什么是规范的方式?没有access_token和权限是否可能?

FQL不受反对。博客文章讨论了Rest API,具体来说,稍后它说明了FQL的变化。

要访问注释,您需要一个可以查看顶级对象的有效访问令牌。假设这只是针对网站上的评论,那么通过下面的场景5(在https://developers.facebook.com/roadmap/offline-access-removal/

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

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

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

$facebook->setAccessToken('YOUR_PAGE_TOKEN');

因此,从这里您可以对加载了SDK的PHP页面进行AJAX POST

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'];
}
?>

参考

  • https://developers.facebook.com/docs/graphapi/guides/comments/
  • https://developers.facebook.com/roadmap/offline-access-removal/