Подсчет количества лайков средствами php
В дополнении к голосованию через соц. сети хочу поделиться кодом получения количества лайков с помощью php кода, а не javasript.
Кто не желает читать методы поиска, прошу в самый конец поста, там я выложил код целиком и ссылку на файл. По тексту будет мало кода по причине местного парсера, который пожрет половину кавычек.
А нафига оно мне?
Ответ прост. На всех сайтах где требуются лайки в принципе, мы добавляем 4 социальных сети: facebook (fb), vkontakte (vk), google+ (g+) и twitter (tw). Вариант на js может получать количество всех лайков кроме G+, нехитрый запрос в гугле (Иногда задумываюсь: чтобы мы без него делали? На книжках бы разорились!) дает ссылку на некий ресурс, откуда мы почерпнем необходимые знания, но к сожалению этот вариант вовсе не для js. Дальнейшее гугление ничего не дает и принимается волевое решение: к черту js! давай на php. (в дальнейшем в этой связи были свои разочарования, которые мы с успехом преодолели).
Copy-Past и немного фантазии
Честно сказать как работает код получения 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. В приложенных файлах есть код как подключить и вывести сами кнопки лайков.