如何计算Facebook页面上每个对象的所有喜欢和评论的总数?

时间:2012-03-05 08:45:35

标签: php facebook

我想使用任何可用的facebook API,理想情况是FQL来获取某个Facebook页面上所有对象的所有喜欢和评论的总数。这可能吗?

例如:

如果第X页有10个帖子,每个帖子都有10个赞和20条评论,我要说的总数是:10 * 10 + 20 * 10 = 300。

此外,该页面可能还有其他对象,如照片,视频,这些对象也可能包含其他喜欢和评论,这也应该增加总价值。

2 个答案:

答案 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
    }
}