X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Сбор "лайков" из Facebook и Вконтакте
r3ntg3n
r3ntg3n
Topic Starter сообщение 8.5.2012, 15:12; Ответить: r3ntg3n
Сообщение #1


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

Товарищи с Facebook крайне обходительны, поэтому достать "лайки" определенной ссылки (пользователи сайта лайкали ссылку на страницу) можно как в разных вариация (только likes, только shares, и likes+shares), так и разными способами (api.facebook.com, graph.facebook.com). Так как на виджете отображается количество likes+количество shares, было решено в рейтинге тоже использовать его. Собственно, код:
[PHP]
$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;[/PHP]

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

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

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

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

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

Итак, код:
[PHP]
/**
* Ссылка получения виджета, параметр 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;[/PHP]
Собственно все, у меня скрипт получения статы из социалок висит в кроне на каджые 15 минут. Вдруг кому пригодиться.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 8.5.2012, 20:09; Ответить: ZhukV
Сообщение #2


Норм, спасибо!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
TrefAS
TrefAS
сообщение 15.12.2013, 12:11; Ответить: TrefAS
Сообщение #3


То, что нужно. Огромное спасибо за код. Еще бы отправку лайков осилить. :goodpost:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 15.12.2013, 17:48; Ответить: Arks
Сообщение #4


Было бы неплохо приложить ссылку на описание API fql.query
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
NoDrum
NoDrum
сообщение 18.12.2013, 23:59; Ответить: NoDrum
Сообщение #5


А через API ВКонтакте религия не позволяет?

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Требуется помощь по сайту на "ВордПресс"
Закрылся доступ в панель администратора
12 Tia2 1523 25.3.2024, 6:54
автор: Skyworker
Открытая тема (нет новых ответов) ✅ sms.chekons.com - ⭐ Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" ⭐
Сервис для получения SMS на реальные номера USA
10 Chekon 3581 24.3.2024, 14:15
автор: Chekon
Открытая тема (нет новых ответов) ⭐⭐⭐ Google Voice | Gmail - OLD аккаунты "SMS и звонки" ⭐⭐⭐
12 Chekon 3815 24.3.2024, 13:56
автор: Chekon
Горячая тема (нет новых ответов) TopSmm.ru Накрутка Вконтакте/Instagram/YouTube и др. Гарантия на докрутку и самые низкие цены!
74 KalininDima 38595 15.3.2024, 16:12
автор: KalininDima
Опрос (нет новых голосов) Опрос: Результаты в упражнении "Жим лёжа" у вэбмастеров
35 Room 4464 13.3.2024, 13:10
автор: Room


 



RSS Текстовая версия Сейчас: 28.3.2024, 21:22
Дизайн