Узнать количество твитов в Twitter, лайков и share в facebook, ВКонтакте, Одноклассниках, Google+ на PHP

При создании одного из сайтов, поступило необычное требования — заказчик захотел выводить помимо обычных блоков лайков суммарное число лайков по трём соц. сетям: 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 количество плюсов