Узнать количество твитов в 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 раскомменьте).

01.$url = "ссылка";
02. 
03.//количество твитов в Twitter
04.$twitter_request = file_get_contents('http://urls.api.twitter.com/1/urls/count.json?url='.$url);
05.$twitter = json_decode($twitter_request);
06.// в $twitter->count число твитов
07. 
08.//количество лайков в facebook
09.$facebook_request = file_get_contents('http://graph.facebook.com/'.$url);
10.$fb = json_decode($facebook_request);
11.$vb_c = 0;
12.if(property_exists($fb,'shares'))
13.$vb_c =$fb->shares;
14.// в $vb_c число лайков фейсбука
15. 
16.//узнать количество лайков на vk
17.//необходимо, чтобы был включен модуль ssl в php
18.$id_app = 000000; //id вашего приложения vk
19.$vk_request = file_get_contents('http://vk.com/widget_like.php?app='.$id_app.'&url='.$url);
20.$vc_count =  preg_replace('/(.*)var counter = (([0-9])*);(.*)/is','$2',$vk_request );
21.//в $vc_count количество лайков в vk
22. 
23.//количество расшариваний на vk
24.$vk_request = file_get_contents('http://vk.com/share.php?act=count&index=1&url='.$url);
25.$temp = array();
26.preg_match('/^VK.Share.count\(1, (\d+)\);$/i',$vk_request,$temp);
27.//в $temp[1] количество расшариваний, то есть сколько раз нажали "рассказать друзьям"
28. 
29.//инфа по Одноклассникам
30.$odnoklassniki_request = file_get_contents('http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref='.$url);
31.$temp = array();
32.preg_match("/^ODKL.updateCountOC\('[\d\w]+','(\d+)','(\d+)','(\d+)'\);$/i",$odnoklassniki_request,$temp);
33.//в $temp[1] количество лайков на odnoklassniki.ru
34. 
35.//инфа по "моему миру" на мейле
36.$mail_request = file_get_contents('http://connect.mail.ru/share_count?url_list='.$url);
37.$mail = json_decode($mail_request);
38.settype($mail, 'array');
39.if(count($mail)>0)
40.  $mail = $mail[$url];settype($mail, 'array');
41.// в $mail["shares"] и $mail["clicks"] необходимая инфа
42. 
43.//количество плюсиков в Google Plus
44.$google_request = file_get_contents('https://plusone.google.com/u/0/_/+1/fastbutton?count=true&url='.$url);
45.$plusone_count = preg_replace('/(.*)<div id="aggregateCount" class="t1">(([0-9])*)<\/div>(.*)/is','$2',$google_request);
46.//в $plusone_count количество плюсов

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

  1. Уведомление: Как отслеживать кнопки Like, Tweet, Мне нравится в социальных сетях | Suvitruf's Blog

  2. Антон

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

    1. Suvitruf Автор записи

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

  3. dragornus

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

  4. Кир Ёжиков

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

    1. Suvitruf Автор записи

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

      1. Денис

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

        1. Александр

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

  5. Келли Дженко

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

Добавить комментарий для Suvitruf Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *