Как проверить, как многие мои друзья любят определенную страницу на facebook с помощью PHP SDK

Я работаю над приложением, которое присуждает пользователям очки для каждого из их друзей, которые любят мою страницу.

Мне нужен способ проверить, сколько друзей пользователя, как моя страница. Я разработал этот кусок кода, чтобы проверить каждого моего друга за то, что вам понравилась конкретная страница:

    $friends = $facebook->api('/me/friends'); //list my friends
    $time_start = microtime(true);
    echo "
";
    $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 "
"; exit;

В финальной версии я не буду проверять своих друзей, но друзей каждого из моих пользователей. Мой код выполняется через 14 секунд, если бы мне пришлось перебирать, допустим, 100 пользователей, это было бы 1400 секунд, что долго waaaay. Есть ли лучший способ сделать это? Я новичок в API facebook, поэтому я мог пропустить что-то очевидное :)

0
nl ja de
Пробовали ли вы FQL ?
добавлено автор Anvesh Saxena, источник

1 ответы

Хорошо, так вот рабочая часть кода. Вам нужно знать токен доступа для каждого проверяемого пользователя. Он выполняет в ~ 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);
}
0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp