Узнаем количество tweets, facebook likes, share ВКонтакте, Однокласниках, LinkedIn и Buzz для URL

4.04.2011 00:03

Пару дней назад меня спросили, можно ли программно (например из PHP) получить количество твитов, лайков фейсбука и shares ВКонтакте какого-то определенного URL.

Ранее я никогда не сталкивался с такими вопросами, т.к. род моей WEB-деятельности лежит немного в стороне от индустрии социальных сетей.

В общем-то, не сомневаясь, что решение есть, начал искать. Для тех кому интересно – подробности и примеры кода далее.

Начал я из ВКонтакт-а, зная, что он наименее демократичен и наименее расположен к разработчикам. В API никакого открытого решения я не нашел. Зато на просторах интернета наткнулся на один прекрасный URL:

http://vkontakte.ru/share.php?act=count&index=1&url=YOUR_URL

где YOUR_URL и будет вашим URL для которого вы хотите узнать количество «shares». Единственно «но» – формат выдачи – ответ от ВКонтакте приходит приблизительно вот такой:

VK.Share.count(1, SHARES_COUNT);

где SHARES_COUNT и будет количеством «shares». Так что разбирать придется регулярными выражениями. Для тех у кого с этим могут быть проблемы – пример будет в конце статьи.

Аналогично с Одноклассниками, LinkedIn, Google Buzz.

Для likes и shares Facebook (там это, с недавнего времени, фактически одно и тоже) решение нашлось еще быстрее:

http://graph.facebook.com/YOUR_URL

Формат выдачи информации – JSON.

Такая же ситуация и с Twitter:

http://urls.api.twitter.com/1/urls/count.json?url=YOUR_URL

Формат выдачи информации – также обычный JSON.

Теперь для тех, кто только начинает постигать PHP, примеры кода. Сразу оговорюсь, что они написаны строго для визуализации и не содержит перехват возможных ошибок, которые могут быть (и рано или поздно обязательно будут) при запросе данных со сторонних сайтов. Также, он требует включенной настройки allow_url_fopen в php.ini

Пример сделан для одной из страниц этого блога http://ar3b.com/eto-cho.html. Вы же, вместо этого URL, должны будете подставлять свой.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$vk_request = file_get_contents('http://vkontakte.ru/share.php?act=count&index=1&url=http://ar3b.com/eto-cho.html');
$tmp = array();
preg_match('/^VK.Share.count\(1, (\d+)\);$/i',$vk_request,$tmp);
echo "ВКонтакте: ".$tmp[1]."<br>";
 
$facebook_request = file_get_contents("http://graph.facebook.com/http://ar3b.com/eto-cho.html");
$fb = json_decode($facebook_request);
echo "Facebook likes: ".$fb->shares."<br>";
 
$twitter_request = file_get_contents("http://urls.api.twitter.com/1/urls/count.json?url=http://ar3b.com/eto-cho.html");
$twitter = json_decode($twitter_request);
echo "Tweets count: ".$twitter->count."<br>";
 
$odnocl_request = file_get_contents("http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref=http://ar3b.com/eto-cho.html");
$tmp = array();
preg_match("/^ODKL.updateCountOC\('[\d\w]+','(\d+)','(\d+)','(\d+)'\);$/i",$odnocl_request,$tmp);
echo "Одноклассники: ".$tmp[1]."<br>";
 
$linkedin_request = file_get_contents("http://www.linkedin.com/cws/share-count?url=http://ar3b.com/eto-cho.html");
$tmp = array();
preg_match('/^IN.Tags.Share.handleCount\({"count":(\d+),"url":"(.*?)"}\);$/i',$linkedin_request,$tmp);
echo "LinkedIn Shares: ".$tmp[1]."<br>";
 
$buzz_request = file_get_contents("http://www.google.com/buzz/api/buzzThis/buzzCounter?url=http://ar3b.com/eto-cho.html");
$tmp = array();
preg_match('/^google_buzz_set_count\({"(.*?)":(\d+)}\);$/i',$buzz_request,$tmp);
echo "GoogleBuzz Shares: ".$tmp[2]."<br>";

UPDATE: вот тут можно скачать готовый класс.


Метки: , , , , , , ,


Каментов: 19

  1. jack:

    можно узнать количество share (Класс) Odnoklassniki.ru для URL ?
    thanks!

  2. jack:

    Спасибо большое!

  3. Andrej:

    А можно как то узнать количество like в контакте? а то нигде информации нету ((

    • ar3b:

      Надо поискать. Чуть попозже может быть отпишу – сейчас, к сожалению немного не до того :(

  4. Андрей:

    А как насчет ЖЖ ? есть варианты решения?

    • ar3b:

      Склонен считать, что нет.
      Можно развернуться через поиск по блогам Яндекса, но там есть несколько проблем: во первых надо будет парсить большую XML, во вторых кол-во, которое можно оттуда достать совсем далеко от реального. Иногда складывается такое ощущение, что вообще округленное.

  5. Спасибо большое. Единственное, чего не нашел – количества лайков от моего мира. Поэтому спешу добавить сюда.
    http://connect.mail.ru/share_count?url_list=api.mail.ru,mail.ru
    Так же как и в случае твиттера вернет json строку
    {«api.mail.ru»:{«shares»:35,»clicks»:3}, «mail.ru»:{«shares»:33,»clicks»:3}},
    Следует учесть что лайков может не быть вообще и тогда json будет пустой ({})
    Но естественно, проверки я опущу.

    Конечный код будет в Вашем примере выглядеть так:
    $mailru_request = file_get_contents(«http://connect.mail.ru/share_count?url_list=ar3b.com/eto-cho.html»);
    $mailru = json_decode($mailru_request, true);
    echo «Mail.ru count: «.((!empty($mailru['ar3b.com/eto-cho.html']['shares'])) ? $mailru['ar3b.com/eto-cho.html']['shares'] : 0;
    ).»";

    Вроде ничего не напутал..

  6. Анатолий:

    Спасибо!

  7. Анатолий:

    Да, и уже есть Google +1

    https://plusone.google.com/u/0/_/+1/fastbutton?count=true&url=http://www.google.com/ grep «window.__SSR = {‘c’: 37795.0″ – 37795.0 answer

  8. Буквально сегодня facebook решил видимо разделить количество likes и shares, поэтому
    $fb->shares надо заменить на $fb->likes

    странно это все, но так случилось

  9. Suvitruf:

    vkontakte.ru/share.php – это не количество лайков, а количество нажатий «рассказать друзьям» Лайки получаются на vk.com/widget_like.php
    Кому интересно, можете тут глянуть (тут была ссылка на что-то левое)

    • ar3b:

      Вообще нигде о количестве лайков, а тем более о «рассказать друзьям» разговор не шел. Тема о кол-ве ссылок на страницу размещенных в соц. сетях. Не надо писать абы что, только бы воткнуть ссылку на свой блог.

Оставить камент