我想使用任何可用的facebook API,理想情况是FQL来获取某个Facebook页面上所有对象的所有喜欢和评论的总数。这可能吗?
例如:
如果第X页有10个帖子,每个帖子都有10个赞和20条评论,我要说的总数是:10 * 10 + 20 * 10 = 300。
此外,该页面可能还有其他对象,如照片,视频,这些对象也可能包含其他喜欢和评论,这也应该增加总价值。
答案 0 :(得分:2)
这相对简单,这是您可以运行的FQL查询:
SELECT likes.count, comments.count FROM stream WHERE source_id = 20531316728
此示例使用Facebook页面,但您可以看到它的工作原理,只需用您自己的页面ID替换该页面ID即可。
答案 1 :(得分:1)
马修的解决方案非常好,但缺乏分页,这非常重要。我假设您使用PHP,因此我将向您展示我之前使用过的解决方案
假设您正在使用PHP SDK
include("fb.class.php");
ignore_user_abort(true);
set_time_limit(0);
$fb = new Facebook(array(
"appId" => "2859321",
"secret" => "b226a5sd46as5d4as6d513as",
));
if (!$fb->getUser()) {
if (file_get_contents("accessToken")) {
$fb->setAccessToken(file_get_contents("accessToken"));
} else {
die("We have no access token for adult only pages");
}
}
$page_ids = array();
$page_ids[] = 40796308305; // cocacola
function processPage($data, $id, &$pageComments, &$pageLikes, $&lastTime, $fb) {
foreach($data as $index => $post) {
$post = (object)$post;
$pageComments += $post->comments['count'];
$pageLikes += $post->likes['count'];
$lastTime = $post->created_time;
}
$result = ($fb->api("/fql?q=".urlencode("SELECT comments.count, created_time, likes.count FROM stream WHERE source_id = {$id} AND created_time < {$lastTime} LIMIT 10000")));
echo "Proccessing ".count($data)." posts. Last post has time $lastTime\n";
if ($result) {
processPage($result["data"], $id, $pageComments, $pageLikes, $lastTime, $fb);
}
}
try {
$totalComments = 0;
$totalLikes = 0;
foreach($page_ids as $id) {
$pageComments = 0;
$pageLikes = 0;
$result = ($fb->api("/fql?q=".urlencode("SELECT comments.count, likes.count FROM stream WHERE source_id = ".$id." LIMIT 10000")));
if (!empty($result["data"])) {
//paginate
processPage($result["data"], $id, $pageComments, $pageLikes, $lastTime, $fb);
echo "Proccessed page id $id\n";
}
updateDbPost($id, $pageLikes, $pageComments);
}
} catch (Exception $e) {
die("Something failed, it should not have passed here :: ".$e->getMessage());
}
function updateDbPost($id, $pageLikes, $pageComments) {
if ($pageLikes > 0) {
//insert to the database
}
}