ИНН 5260488533
+7 993 435 0226
Нижний Новгород, ул. Гоголя, 45а-13
info@sawtech.ru
Политика обработки персональных данных
Подсчет количества лайков средствами php
В дополнении к голосованию через соц. сети хочу поделиться кодом получения количества лайков с помощью php кода, а не javasript.
Кто не желает читать методы поиска, прошу в самый конец поста, там я выложил код целиком и ссылку на файл. По тексту будет мало кода по причине местного парсера, который пожрет половину кавычек.
Ответ прост. На всех сайтах где требуются лайки в принципе, мы добавляем 4 социальных сети: facebook (fb), vkontakte (vk), google+ (g+) и twitter (tw). Вариант на js может получать количество всех лайков кроме G+, нехитрый запрос в гугле (Иногда задумываюсь: чтобы мы без него делали? На книжках бы разорились!) дает ссылку на некий ресурс, откуда мы почерпнем необходимые знания, но к сожалению этот вариант вовсе не для js. Дальнейшее гугление ничего не дает и принимается волевое решение: к черту js! давай на php. (в дальнейшем в этой связи были свои разочарования, которые мы с успехом преодолели).
Честно сказать как работает код получения g+ лайков, я не сильно и разбирался. Скопировал, вставил в файл php, поправил на свои параметры — все работает, значит, пользуемся на здоровье. Я пытался найти официальную документацию по поводу этого кода, но у меня ничего не получилось, наверное, я просто не старался. Ниже код, который я взял с указанного ресурса.
function get_plusones($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, '[{
"method":"pos.plusones.get",
"id":"p",
"params":{
"nolog":true,
"id":"' . $url . '"
,"source":"widget",
"userId":"@viewer",
"groupId":"@self"
},
"jsonrpc":"2.0",
"key":"p",
"apiVersion":"v1"
}]');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array('Content-type: application/json'));
$curl_results = curl_exec ($curl);
curl_close ($curl);
$json = json_decode($curl_results, true);
return intval( $json[0]['result']['metadata']['globalCounts']['count'] );
}
Так вот. Дергать весь остальной код оттуда, я посчитал излишним, мы и сами с усами. Получить контент документа функцией file_get_contents() мы давно умеем, а если не умеем, то читаем документацию, а дальше все аналогично js за исключением разбора json, в php это делается явным образом через json_decode(). Первым сюрпризом для меня было, что fb отдает данные не в json (а может надо было указать формат выдачи в запросе???), а в xml. Но это мы быстро победили. Все остальное было просто забрал json, вытащил нужную инфу и вот. Ну в общем все тут понятно. должно быть. Наверное. Ниже есть место для комментов ежели что.
Ну что все круто. Погоняли, потестили на рабочем серваке (для справки, мы используем хостинг timeweb). Потащили код к клиенту. (nic.ru) Залили и началось. Сначала выяснилось что curl у него не включен. Фигня, в настройках хостинга включаем как опцию, ладно хоть бесплатно. А потом вообще лажа какая-то ругается на file_get_contents() разными словами. Я его и так и сяк, но время поджимало и решил сделать вообще все через curl, дешево и сердито. Главное, клиент доволен.
Как было выяснено в дальнейшем вся лажа была в том, что при получении содержимого через file_get_contents() и если в url используется протокол https, то все «тушите свет» и «крокодил до свидания», скорее всего не включен модуль php openssl. Как это лечить на конкретно взятом хостинге я не могу сказать, не искал, технически достаточно использовать незащищенный протокол http. Стремно, а что делать?! В приложении код через curl.
Все соц сети окромя VK работают по url страницы, для VK нужен уникальный id записи или еще чего-то. Ваша фантазия тут будет уместна.
Код подсчета количества лаков fb.
function get_fb_likes($url) {
$curl = curl_init();
$url = 'http://api.facebook.com/restserver.php?method=links.getStats
&format=json&urls='.$url;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_results = curl_exec ($curl);
curl_close($curl);
// разбор в json
$res = json_decode($curl_results);
return $res[0]->like_count;
};
Код подсчета количества лаков vk. (Не забудьте сменить YOUR_ID на контактовский id сайта)
function get_vk_likes($id) {
$curl = curl_init();
$url = 'https://api.vkontakte.ru/method/likes.getList?type=sitepage
&owner_id=YOUR_ID&format=json&item_id='.$id;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_results = curl_exec ($curl);
curl_close($curl);
// разбор в json
$res = json_decode($curl_results);
return intval($res->response->count);
};
Код подсчета количества лаков twitter.
function get_twitt_likes($url) {
$curl = curl_init();
$url = 'http://urls.api.twitter.com/1/urls/count.json?url=' . $url;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_results = curl_exec ($curl);
curl_close($curl);
// разбор в json
$res = json_decode($curl_results);
return intval( $res->count );
};
Не забываем создать id для сайта в vk. В приложенных файлах есть код как подключить и вывести сами кнопки лайков.
ИНН 5260488533
+7 993 435 0226
Нижний Новгород, ул. Гоголя, 45а-13
info@sawtech.ru