我有facebook评论框。我想在用户发表评论时将评论存储在数据库中。所以我附加了一个回调函数FB.event.subscribe('comment.create', ...
从那里我得到commentID
和href
但是得到确切评论的唯一方法是使用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和权限?
答案 0 :(得分:2)
不推荐使用FQL。该博客文章专门讨论了 Rest API ,稍后会说明使用FQL进行更改。
要访问评论,您需要一个可以查看顶级对象的有效访问令牌。假设这只是用于网站上的评论,那么正常的扩展页面访问令牌应该足够遵循在https://developers.facebook.com/roadmap/offline-access-removal/
中解释的方案5https://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
使用端点和先前解释的步骤,为长期访问令牌交换短期用户访问令牌。通过使用长期存在的用户访问令牌,查询[用户ID] /帐户端点现在将提供对于用户管理的页面不会过期的页面访问令牌。
然后使用来自[用户ID] /帐户的页面访问令牌,您几乎可以对其进行硬编码(您可以创建自己的后端登录工具,如果您有一天使令牌无效或需要更改它)通过服务器端语言,例如使用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'];
}
?>
参考