При создании одного из сайтов, поступило необычное требования — заказчик захотел выводить помимо обычных блоков лайков суммарное число лайков по трём соц. сетям: 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 количество плюсов
Уведомление: Как отслеживать кнопки Like, Tweet, Мне нравится в социальных сетях | Suvitruf's Blog
Вы МЕГА МОЗГ!!!) Блиииин, то что надо, спасибо!!!!
А есть способ узнать число твитов и лайков на сайт в целом, а не на отдельные страницы?
Не слышал о таком. Можно для каждой страницы запрос отправить и просуммировать)
Спасибо !
Кратко и без воды.
Главное URL запроса, а PHP сами люди придумают ;)
Пару примеров скопировал в строку браузера со экспериментальными сайтами — работает !
В яше эта страница 4 месте по основному запросу несправедливо, т.к. полностью отвечает на него.
Спасибо ещё раз.
Спасибо. Но одноклассники больше не выдают лайки по этому урл. Точнее выдают, но значение с количством share не меняется.
Потому что для одноклассников получение лайков происходит путём парсинга полученной страницы. Скорей всего они что-то в вёрстке поменяли или переменную по другому назвали =/
Нет все так же просто почему то когда запрос идет через браузер то он выдает нормальные данные, а когда через file_get_contents выдает только нули. Не решали проблему?
Правильно было бы получать контекст страниц через Curl с имитацией браузера. Тогда таких проблем не будет.
Скажите, как мне вывести количество упоминаний определенного запроса (не title, а именно из доп.поля) в соц.сетях цифрами? То есть, нужно такое же, как и на tjournal[точка]ru (не реклама!).
Не совсем понял, что значит «из доп.поля» )
Спасибо. Классный скрипт ))
Печально что твиттер при использовании в переменной $url значения в виде http://site.com/page.html или http://site.com/page возвращает количество 0,