Ускорьте альтернативный способ получить поклонников Facebook без использования ключа приложения или CURL - PullRequest
0 голосов
/ 04 февраля 2011

Я получил данные Facebook от graph.facebook.com без использования CURL, выполнив некоторую случайность PHP ...:)

Это немного сбоку, но я не знаю, как использовать CURL, и я такжене нужно передавать какие-либо ключи приложения или что-либо еще и т. д.

// Create a function to calculate the number of fans.
function calculatefans($facebookid) {
    $file = "https://graph.facebook.com/".$facebookid;
    // Get data from that specific Facebook page    
    $facebookdata = file_get_contents($file);
    // Reverse data from Facebook Graph so that the "likes" figure is at the front
    $facebookbackwards = strrev($facebookdata);
    // Select only the "likes" figure is in the variable
    $offset = strpos($facebookbackwards, ":");
    // Minus 1 from the offset
    $newoffset = $offset-1;
    $fansbackwards = substr($facebookbackwards, 1, $newoffset);
    // Turn the "likes" figure the right way around
    $fans = strrev($fansbackwards);
    // Change the result from a string to an integer so you can do some maths on the result.
    $fanresult = (int)$fans;
    // Use return not echo because you want to do something with the data later.
        return $fanresult;
}

Однако, очевидно, это работает очень медленно ... Мне было интересно, есть ли у кого-нибудь идеи о том, как я мог бы ускорить это?

Мой веб-сайт, на котором я работаю, это http://www.ibizavote.com. Если вы видите, код работает, однако, когда я добавляю это на сайт, сайт переходит от загрузки в 4.4secs к 14.4seconds.

Я уверен, что смогу ускорить это ... Есть идеи?

Спасибо, Алекс

1 Ответ

0 голосов
/ 05 февраля 2011

Обращения str, substr, strpos очень быстрые.

Медленной частью будет запрос веб-службы. Если вы делаете это с помощью curl, вы можете отправлять несколько запросов одновременно, следуя приведенному здесь примеру и адаптируя его для API Facebook: http://php.net/manual/en/function.curl-multi-init.php.

Просто напоследок: почему вы не анализируете ответ Facebook как данные JSON? json_decode реализован в c, а также быстро. Скопирование строк, которое вы здесь делаете, будет подвержено ошибкам, если формат вывода Facebook изменится.

Также вы можете захотеть взглянуть на FQL, где вы можете создавать более сложные отчеты и возвращать только ту часть данных, которую вы ищете. Смотри: http://developers.facebook.com/docs/reference/fql/

Еще одна вещь, которую вы хотите сделать в подобных ситуациях, - это кэшировать ответ от Facebook, чтобы вам не приходилось спрашивать их все подсчеты поклонников на каждый запрос.

Параллельные запросы (curl_multi_init) + кэширование - это путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...