PHP, JavaScript
В этом уроке вы узнаете как работать с методом likes.getList. Узанете как отправить запрос серверу api с помощью официального класса для вызова серверных методом, как обработать полученный ответ.
![Изображение](https://flapps.ru/example/img/likes_count.png)
likes.getList
Получает список идентификаторов пользователей, которые добавили заданный объект в свой список Мне нравится.
Данный метод может быть вызван без использования авторизационных данных (параметры session или access_token).
Параметры
type - тип Like-объекта. Подробнее о типах объектов можно узнать ниже.
owner_id - идентификатор владельца Like-объекта (id пользователя или id приложения). Если параметр type равен sitepage, то в качестве owner_id необходимо передавать id приложения. Если параметр не задан, то считается, что он равен либо идентификатору текущего пользователя, либо идентификатору текущего приложения (если type равен sitepage).
item_id - идентификатор Like-объекта. Если type равен sitepage, то параметр item_id может содержать значение параметра page_id, используемый при инициализации виджета «Мне нравится».
page_url - url страницы, на которой установлен виджет виджета «Мне нравится». Используется вместо параметра item_id.
friends_only - указывает, необходимо ли возвращать только пользователей, которые являются друзьями текущего пользователя. Параметр может принимать следующие значения:
0 – возвращать всех пользователей в порядке убывания времени добавления объекта
1 – возвращать только друзей текущего пользователя в порядке убывания времени добавления объекта
Если метод был вызван без авторизации или параметр не был задан, то считается, что он равен 0.
offset - смещение, относительно начала списка, для выборки определенного подмножества. Если параметр не задан, то считается, что он равен 0.
count - количество возвращаемых идентификаторов пользователей.
Если параметр не задан, то считается, что он равен 100, если не задан параметр friends_only, в противном случае 10.
Максимальное значение параметра 1000, если не задан параметр friends_only, в противном случае 100.
Список типов Like-объектов
На данный момент в API поддерживается работа со следующими типами Like-объектов, которые используются на основном сайте:
post - запись на стене пользователя или группы.
photo - фотография
audio - аудиозапись
video - видеозапись
sitepage - страница сайта, на котором установлен виджет «Мне нравится»
https://vk.com/developers.php?o=-1&p=%D ... A%F2%EE%E2
Способ 1
Этот способ подходит, если вам нужно узнать количество лайком у большого количества объектов.
Метод likes.getList может быть вызван без использования авторизационных данных (параметры session или access_token).
Воспользуемся способом вызова методов ВКонтакте API, описанным здесь https://vk.com/developers.php?oid=-1&p= ... %D0%BA_API
Код будет такой:
Код: Выделить всё
$res = file_get_contents('https://api.vk.com/method/likes.getList?type=sitepage&owner_id=1942958&page_url=http://flapps.ru/vk-gifts/gift485');$resp = json_decode($res, true); echo 'Количество лайков: '.$resp['response']['count'];
Ограничение может быть на вашем хостинге - на время выполнения скрипта.
При большом количестве объектов, будет много обращений к API, которые могут занимать много времени. Рекомендую хранить количество лайков в базе данных, которую следует обновлять через какой-то промежуток времени, запустив скрипт с обращением к API. Скрипт запускать по крону.
Так же можно сразу обновлять базу, но не по всем объектам сразу, а только по одному конкретному.
Для этого прочтите документацию по виджету «Мне нравится» https://vk.com/pages?oid=-1&p=%D0%94%D0 ... 1%81%D1%8F
При нажатии на кнопку "Мне нравится" виджет передаёт события widgets.like.liked и widgets.like.unliked используя VK.Observer. В функцию-обработчик будут переданы один параметр - количество отметок "Мне нравится" у текущей страницы.
На странице с «Мне нравится» добавляем такой код
Код: Выделить всё
VK.Observer.subscribe('widgets.like.liked',function(){ update_likes(); }); VK.Observer.subscribe('widgets.like.unliked',function(){ update_likes(); }); function update_likes() { // нужно передать какой-то параметр, по которому в скрипте likes.php определить, информацию по какому объекту нужно обновить в базе. $.post('https://flapps.ru/vk-gifts/likes.php', {"gift_id": 485}); }
Способ 2
У этого способа есть ограничение - 3 запроса в секунду.
Этот способ можно использовать, например, если вам нужно узнать количество лайком у небольшого количества объектов. На практике использовать этот способ с методом likes.getList не имеет смысла. Достаточно использовать первый способ.
Файл vkapi.class.php - это официальный класс для вызова серверных методов (PHP).
Скачать его можно здесь https://vk.com/source/APIServerPHPClass.zip
vkapi.class.php нужно положить в папку с созданным php скриптом.
Код: Выделить всё
<?/* https://flapps.ru/forum/ - форум о создании приложений */require 'vkapi.class.php'; $api_id = '1942958';$secret_key = 'qweRtyuiop12asdFghjk'; $VK = new vkapi($api_id, $secret_key);$resp = $VK->api('likes.getList', array('type'=>'sitepage', 'owner_id'=>1942958, 'page_url'=>'https://flapps.ru/forum/'));// print_r($resp); // раскомментировать эту строку, чтобы увидеть ответ от сервера // сервер вернёт количество лайков (count) и список id пользователей, которые кликнули по Мне нравится // выводим количествоecho 'Количество лайков: '.$resp['response']['count'].'<br /><br />'; // первые 2 пользователяecho 'Первые 2 пользователя: '.$resp['response']['users'][0].', '.$resp['response']['users'][1].'<br /><br />'; echo 'Все пользователи: <br />';$users_count = sizeOf($resp['response']['users']);for($i=0;$i<$users_count;$i++){ echo $resp['response']['users'][$i].'<br />';}?>
Это один из вариантов работы с методом likes.getList.
Если вы указывали page_id в своём виджете, то получить информацию можно по этому параметру, поставив его значение в item_id
Если вы используете api_id тот же самый, что и api_id при инициализации виджета, то указывать параметр owner_id не обязательно.
Чтобы узнать количество и список друзей пользователя, нужно использовать параметр friends_only. При этом пользователю нужно пройти авторизацию (параметры session или access_token).
Читайте более подробное описание в официальной документации https://vk.com/developers.php?o=-1&p=likes.getList