0

我有脸书评论框。当用户发表评论时,我想将评论存储在数据库中。因此,我在FB.event.subscribe('comment.create', ...From there I get附加了一个回调函数commentIDhref但获得确切评论的唯一方法是使用从 2011 年开始弃用的 FQL,没有人知道 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
            }

        // ...


    }
)

问题是当在本地主机上时 - 它返回一个元素的数组 - 我想要的评论。当我上传到我的应用程序时 - 然后它返回没有元素的数组。可能存在权限问题。我的问题是如何在提交时获取评论的内容。什么是规范的方式?没有 access_token 和权限可以吗?

4

1 回答 1

2

FQL 未被弃用。该博客文章专门讨论了Rest API,稍后它说明了 FQL 的变化。

要访问评论,您需要一个可以查看顶级对象的有效访问令牌。假设这只是针对网站上的评论,按照https://developers.facebook.com/roadmap/offline-access-removal/中解释的场景 5,一个普通的扩展页面访问令牌就足够了

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

}
?>

参考

于 2013-07-22T18:28:39.607 回答