Узнать количество твитов в 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 количество плюсов

  Категории: php, Соц. сети
  • Pingback: Как отслеживать кнопки Like, Tweet, Мне нравится в социальных сетях | Suvitruf's Blog()

  • Марат

    Вы МЕГА МОЗГ!!!) Блиииин, то что надо, спасибо!!!!

  • Антон

    А есть способ узнать число твитов и лайков на сайт в целом, а не на отдельные страницы?

    • http://suvitruf.ru Suvitruf

      Не слышал о таком. Можно для каждой страницы запрос отправить и просуммировать)

  • dragornus

    Спасибо !
    Кратко и без воды.
    Главное URL запроса, а PHP сами люди придумают ;)
    Пару примеров скопировал в строку браузера со экспериментальными сайтами – работает !
    В яше эта страница 4 месте по основному запросу несправедливо, т.к. полностью отвечает на него.
    Спасибо ещё раз.

  • Кир Ёжиков

    Спасибо. Но одноклассники больше не выдают лайки по этому урл. Точнее выдают, но значение с количством share не меняется.

    • http://suvitruf.ru Suvitruf

      Потому что для одноклассников получение лайков происходит путём парсинга полученной страницы. Скорей всего они что-то в вёрстке поменяли или переменную по другому назвали =/

      • Денис

        Нет все так же просто почему то когда запрос идет через браузер то он выдает нормальные данные, а когда через file_get_contents выдает только нули. Не решали проблему?

        • Александр

          Правильно было бы получать контекст страниц через Curl с имитацией браузера. Тогда таких проблем не будет.

  • Келли Дженко

    Скажите, как мне вывести количество упоминаний определенного запроса (не title, а именно из доп.поля) в соц.сетях цифрами? То есть, нужно такое же, как и на tjournal[точка]ru (не реклама!).

    • http://suvitruf.ru Suvitruf

      Не совсем понял, что значит “из доп.поля” )

  • http://elgreloo.net Давид

    Спасибо. Классный скрипт ))

  • http://adnota.ru Саня

    Печально что твиттер при использовании в переменной $url значения в виде http://site.com/page.html или http://site.com/page возвращает количество 0,