如何使用PHPSDK检查我有多少朋友喜欢facebook上的特定页面

如何使用PHPSDK检查我有多少朋友喜欢facebook上的特定页面,php,facebook,performance,facebook-graph-api,Php,Facebook,Performance,Facebook Graph Api,我正在开发一个应用程序,它可以为每个喜欢我的页面的朋友奖励用户分数 我需要一种方法来检查有多少用户的朋友喜欢我的页面。我开发了这段代码来检查我的每个朋友是否喜欢某个特定页面: $friends = $facebook->api('/me/friends'); //list my friends $time_start = microtime(true); echo "<pre>"; $i = 0; //counter of likes $

我正在开发一个应用程序,它可以为每个喜欢我的页面的朋友奖励用户分数

我需要一种方法来检查有多少用户的朋友喜欢我的页面。我开发了这段代码来检查我的每个朋友是否喜欢某个特定页面:

    $friends = $facebook->api('/me/friends'); //list my friends
    $time_start = microtime(true);
    echo "<pre>";
    $i = 0; //counter of likes
    $b = 0; //counter of request in single batch API request
    $batch_max = 50 // facebook allows max 50 requests in single batch API call
    $page_id = '187941397895831'; //example page ID, i'm checking how many of my    friends like this page
    $batch = array(); //array used for creating batch API request
    $data = array(); //array collecting all API requests results
    foreach ($friends['data'] as $friend) {
        $req = array(
            'method' => 'GET',
            'relative_url' => '/'.$friend['id'].'/likes'
        );
        $batch[] = json_encode($req);
        $b++;
        if ($b == 50) {
            $params = array(
                'batch' => '[' . implode(',',$batch) . ']'
            );
            $data[] = $facebook->api('/', 'POST', $params);
            $b = 0;
            $batch = array();
        }
    }
    $params = array(
        'batch' => '[' . implode(',',$batch) . ']'
    );
    $data[] = $facebook->api('/', 'POST', $params);
    foreach ($data as $data_set) { //iterate through results of each api request
        foreach ($data_set as $friend_likes) { //iterate through data of particular friend
            $likes_array = json_decode($friend_likes['body'], true);
            foreach ($likes_array['data'] as $single_like) { //iterate through all likes of a single friend
                if ($single_like['id'] == $page_id) { //if page id found in user's likes increase counter
                    $i++;
                }
            }
        }
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo $time."\n";
    echo $i;
    echo "</pre>";
    exit;
$friends=$facebook->api('/me/friends')//列出我的朋友
$time\U start=微时间(真);
回声“;
$i=0//反对者
$b=0//单批API请求中的请求计数器
$batch_max=50//facebook允许在单个批处理API调用中最多有50个请求
$page_id='187941397895831'//示例页面ID,我正在检查有多少朋友喜欢此页面
$batch=array()//用于创建批处理API请求的数组
$data=array()//收集所有API请求结果的数组
foreach($friends['data']作为$friends){
$req=数组(
'方法'=>'获取',
'relative_url'=>'/'.$friend['id']./likes'
);
$batch[]=json_encode($req);
$b++;
如果($b==50){
$params=数组(
'batch'=>'['.内爆(',',$batch)。']
);
$data[]=$facebook->api(“/”、“POST”、$params);
$b=0;
$batch=array();
}
}
$params=数组(
'batch'=>'['.内爆(',',$batch)。']
);
$data[]=$facebook->api(“/”、“POST”、$params);
foreach($data as$data\u set){//遍历每个api请求的结果
foreach($data\u设置为$friend\u likes){//遍历特定朋友的数据
$likes\u array=json\u decode($friend\u likes['body'],true);
foreach($likes_array['data']作为$single_like){//遍历单个朋友的所有like
if($single_like['id']=$page_id){//if在用户的likes递增计数器中找到页面id
$i++;
}
}
}
}
$time\U end=微时间(真);
$time=$time\U end-$time\U start;
回显$time。“\n”;
echo$i;
回声“;
出口

在最终版本中,我不会检查我的朋友,而是检查每个用户的朋友。我的代码在14秒内执行,如果我必须遍历100个用户,那么它将是1400秒,这是很长的时间。有更好的方法吗?我是facebook API的新手,所以我可能会错过一些明显的东西:)

好的,下面是工作代码。您需要知道每个被检查用户的访问令牌。它的执行时间约为0.6秒,而不是之前代码的14秒

你试过了吗?
$queryResults = array();
$facebook->setAccessToken($user->getAccessToken());
$fql = "SELECT '' FROM page_fan WHERE page_id = 'xxxxxxxxxxxx' AND uid IN (SELECT uid2 FROM friend WHERE uid1 = '".$user->getFbId()."')";
$fql = urlencode($fql);

try {
    $queryResults = $facebook->api(
        '/fql?q='.$fql
    );
} catch (FacebookApiException $e) {
    $log->setMessage(print_r($e,true));
    $logMapper->save($log);
}

if (!empty($queryResults)) {
    $user->setPoints(count($queryResults['data']));
    $usersMapper->save($user);
}