+ Ответить в теме
Показано с 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.
    Спасибо за внимание

  2. #2
    Местный ZhukV на пути к лучшему Аватар для ZhukV
    Регистрация
    19.12.2009
    Адрес
    Lutsk, Volyns'Ka Oblast', Ukraine, Ukraine
    Сообщений
    1,835
    Thanks
    30
    Thanked 237 Times in 226 Posts
    Записей в дневнике
    3
    Норм, спасибо!

  3. #3
    Новичок TrefAS на пути к лучшему Аватар для TrefAS
    Регистрация
    15.12.2013
    Сообщений
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts
    То, что нужно. Огромное спасибо за код. Еще бы отправку лайков осилить.

  4. #4
    Местный Arks - луч света в тёмном царстве Arks - луч света в тёмном царстве Arks - луч света в тёмном царстве Arks - луч света в тёмном царстве Arks - луч света в тёмном царстве Аватар для Arks
    Регистрация
    20.03.2010
    Адрес
    Москва
    Сообщений
    2,778
    Thanks
    66
    Thanked 284 Times in 266 Posts
    Было бы неплохо приложить ссылку на описание API fql.query
    Earling Mitsomaar!! div-pro

  5. #5
    Местный NoDrum на пути к лучшему Аватар для NoDrum
    Регистрация
    12.08.2009
    Адрес
    0.0.0.0
    Сообщений
    213
    Thanks
    0
    Thanked 38 Times in 33 Posts
    А через API ВКонтакте религия не позволяет?

+ Ответить в теме

Похожие темы

  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

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

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

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

Ваши права

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

 

canlı tv film izle