При создании одного из сайтов, поступило необычное требования — заказчик захотел выводить помимо обычных блоков лайков суммарное число лайков по трём соц. сетям: Facebook, Twitter, ВКонтакте. Если на странице всего один блок с лайками/share, то проблем не возникает, как и в плане самих блоков, так и в плане получения числа лайков. Для этого просто в JS запросы JSON делал. Но на главной странице список новостей, для каждой из которых нужен свой блок с кнопками соц. сетей и суммарное число лайков. В следствии чего решили замутить кэш, в котором хранятся эти числа. Скрипт по перерасчёту каждые 10 минут запускается. То есть в php теперь инфу получать надо.
Вся работа в php сводится к многократному вызову функции file_get_contents. Кто уже работал с ней, понимает на сколько это затратно. Функция возвращает файл в виде строки. По сему, при многократном её вызове, скрипт выполняется прилично время.
Для Фейсбука и Твиттера ещё ладно, там данные в JSON. А вот у остальных приходится парсить полученную страницу, из-за этого и выполняется долго скрипт.
Примеры написаны строго для визуализации и не содержат обработку всех возможных ошибок, которые могут быть при запросе данных со сторонних сайтов. Тот же фейсбук, к примеру, ограничивает количество входящих коннектов с одного ip. Так что при многократном обращении в одном скрипте, он перестанет вам отвечать. Также требуется, чтобы была включена настройки allow_url_fopen в php.ini. Ну и для https страниц поддержка ssl нужна (строку extension=php_openssl.dll в php.ini раскомменьте).
$url = "ссылка"; //количество твитов в Twitter $twitter_request = file_get_contents('http://urls.api.twitter.com/1/urls/count.json?url='.$url); $twitter = json_decode($twitter_request); // в $twitter->count число твитов //количество лайков в facebook $facebook_request = file_get_contents('http://graph.facebook.com/'.$url); $fb = json_decode($facebook_request); $vb_c = 0; if(property_exists($fb,'shares')) $vb_c =$fb->shares; // в $vb_c число лайков фейсбука //узнать количество лайков на vk //необходимо, чтобы был включен модуль ssl в php $id_app = 000000; //id вашего приложения vk $vk_request = file_get_contents('http://vk.com/widget_like.php?app='.$id_app.'&url='.$url); $vc_count = preg_replace('/(.*)var counter = (([0-9])*);(.*)/is','$2',$vk_request ); //в $vc_count количество лайков в vk //количество расшариваний на vk $vk_request = file_get_contents('http://vk.com/share.php?act=count&index=1&url='.$url); $temp = array(); preg_match('/^VK.Share.count\(1, (\d+)\);$/i',$vk_request,$temp); //в $temp[1] количество расшариваний, то есть сколько раз нажали "рассказать друзьям" //инфа по Одноклассникам $odnoklassniki_request = file_get_contents('http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref='.$url); $temp = array(); preg_match("/^ODKL.updateCountOC\('[\d\w]+','(\d+)','(\d+)','(\d+)'\);$/i",$odnoklassniki_request,$temp); //в $temp[1] количество лайков на odnoklassniki.ru //инфа по "моему миру" на мейле $mail_request = file_get_contents('http://connect.mail.ru/share_count?url_list='.$url); $mail = json_decode($mail_request); settype($mail, 'array'); if(count($mail)>0) $mail = $mail[$url];settype($mail, 'array'); // в $mail["shares"] и $mail["clicks"] необходимая инфа //количество плюсиков в Google Plus $google_request = file_get_contents('https://plusone.google.com/u/0/_/+1/fastbutton?count=true&url='.$url); $plusone_count = preg_replace('/(.*)<div id="aggregateCount" class="t1">(([0-9])*)<\/div>(.*)/is','$2',$google_request); //в $plusone_count количество плюсов