Показано с 1 по 5 из 5

Тема: Сбор "лайков" из Facebook и Вконтакте

Древовидный режим

  1. #1
    Местный r3ntg3n скоро придёт к известности r3ntg3n скоро придёт к известности Аватар для r3ntg3n
    Регистрация
    10.11.2009
    Сообщений
    741
    Thanks
    3
    Thanked 115 Times in 106 Posts

    Вопрос Сбор "лайков" из Facebook и Вконтакте

    По долгу работы пришлось собирать лайки из указанных социалок для построения рейтинга. Так как соотвествующие виджеты со счетчиками подгружаются в реальном времени, построить общий рейтинг по этим данных не получиться. Для этого надо собрать их в БД, в соотвестующие поля, и сортировать по ним при выводе списка.

    Товарищи с Facebook крайне обходительны, поэтому достать "лайки" определенной ссылки (пользователи сайта лайкали ссылку на страницу) можно как в разных вариация (только likes, только shares, и likes+shares), так и разными способами (api.facebook.com, graph.facebook.com). Так как на виджете отображается количество likes+количество shares, было решено в рейтинге тоже использовать его. Собственно, код:

    $link = 'http://your-host.org/path/to/page'; /* url страницы, лайки которой, собственно достаем */
    /**
    * Для получения данных из системы Facebook использует FQL
    * Facebook Query Language, который похож на SQL, лишь с несколькими
    * ньюансами, подробнее - http://developers.facebook.com/docs/reference/fql/
    */

    /* кодируем запрос на получение количества лайков+количество шейров нашей страницы */
    $fql = urlencode("SELECT total_count FROM link_stat WHERE url=\"{$link}\"");
    $fbLink = 'http://api.facebook.com/method/fql.query?query='; /* адрес api facebook'а */
    /*
    * Конкатенируем адрес api с нашим запросом и получаем результат запроса
    * http://api.facebook.com/method/fql.query?query=YOUR_FQL вернет XML с лайками,
    * в то же время, как http://graph.facebook.com/YOUR_URL вернет JSON с лайками +
    * информацией, которую система собрала из ваших Open Graph мета-тэгов
    * Так как мне нужны только лайки - я выбрал вариант #1
    */
    $response = file_get_contents($fbLink.$fql);
    $fbXML = simplexml_load_string($response); /* Из полученного xml создаем объект */
    /*
    * И собственно достаем количество лайков нашей страницы
    * здесь использовал явное преобразование типа, так как конструкция
    * $fbXML->link_stat->total_count возвращала DOMNodeList
    */
    $facebook_likes = (int)$fbXML->link_stat->total_count;


    Если с Facebook проблем ну вообще никаких, то отечественная социалка "порадовала".
    Все что гуглилось, так это запросы в их систему по адресу
    http://vkontakte.ru/share.php?act=count&index=1&url=YOUR_URL

    На что в результате получали следующее содержимое:
    VK.Share.count(1, SHARES_COUNT);

    Но вот в че беда: здесь ТОЛЬКО количество shares, то есть, когла пользователь кликает по кнопке "Мне нравиться" у вас на странице, над вижджетом появляется блок, в котором он видит список своих друзей, которые уже лайкали эту страницу, и чекбокс "Рассказать друзьям".

    Вот, API Вконтакте возвращает количество "рассказов" друзьям, а в виджете показывает количество лайков + "рассказов". Было решено парсить виджет.

    Виджет отрисовывается на странице вашего сайта через iframe. Он (виджет) может отрисовать себя в нескольких вариантах, за это отвечает параметр type, который передается в систему. Обычная кнопка с сердечком + надпись "Мне нравиться" + счетчик справа соотвествует значению button. Этот вариант виджет светиться на странице, там он меня устраивает. Для парсинга я выбрал минимал вариант: кнопка с лого и сердечком + счетчик срава. Может не намного меньше кода передается, но все же :)

    Итак, код:

    /**
    * Ссылка получения виджета, параметр app выдается системой
    * при регистрации сайта/приложения в ВК, когда вы хотите прикрутить себе их виджет.
    * Опять таки, адрес вашей страницы нужно перекодировать
    */
    $vkLink = 'http://vk.com/widget_like.php?app=1111111&type=mini&url='.urlencode($link);
    $vkDom = new DOMDocument('1.0', 'UTF-8'); /* я парсил виджет через DOMDocument */
    $vkDom->loadHTMLFile($vkLink); /* грузим HTML из файла */
    $vkXPath = new DOMXPath($vkDom); /* для обхода виджет использовал XPath */
    /**
    * Нужное количество лайков+шейров лежит по следующему пути
    * div id="main" => a (счетчик является и ссылкой) =>
    * div class="like_counter => span#stats_num
    * Достать его можно следующим xpath-запросом
    */
    $entries = $vkXPath->query(".//div[@id='main']/a/div[@class='like_counter']/span[@id='stats_num']");
    /**
    * В результате запроса получаем список элементов
    * По скольку в виджете счетчик у нас один, значит
    * значение первого элемента и достаем
    */
    $nodeValue = $entries->item(0)->nodeValue;
    /**
    * Если страницу еще не лайкали, система возвращает значение '+1',
    * в этом случае мы значение заменяем на 0, в другом - просто пишем то,
    * что вернули
    */
    $vk_likes = ($nodeValue == '+1') ? '0' : $nodeValue;

    Собственно все, у меня скрипт получения статы из социалок висит в кроне на каджые 15 минут. Вдруг кому пригодиться.
    Последний раз редактировалось r3ntg3n; 08.05.2012 в 14:16.
    Спасибо за внимание

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 04.04.2012, 14:26
  2. Ответов: 5
    Последнее сообщение: 28.01.2012, 20:35
  3. Ответов: 12
    Последнее сообщение: 17.03.2011, 15:15
  4. Ответов: 3
    Последнее сообщение: 15.11.2010, 22:39
  5. Ответов: 2
    Последнее сообщение: 23.05.2010, 20:47

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения

 

Html-форум Рейтинг@Mail.ru canlı tv film izle