Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение Александр »

Количество и список пользователей, кликнувших по «Мне нравится» (likes.getList)
PHP, JavaScript

В этом уроке вы узнаете как работать с методом likes.getList. Узанете как отправить запрос серверу api с помощью официального класса для вызова серверных методом, как обработать полученный ответ.

Изображение

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'];
Этот код можно вызывать в цикле. Ограничений в 3 запроса в секунду на сервере API при таком обращении к методу нет.
Ограничение может быть на вашем хостинге - на время выполнения скрипта.

При большом количестве объектов, будет много обращений к 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
Saldanet
Сообщения: 2
Зарегистрирован: 08 авг 2011, 05:45

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение Saldanet »

Здравствуйте. Я тут новенький и, наверное, чего-то не понимаю, но данный метод возвращает только id юзеров? А как добиться того, чтобы возвращалось имя, фамилия, а вместе с ними и ссылка на профайл пользователя? Заранее спасибо за ответ.
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение bodnar »

применить метод getProfiles
Saldanet
Сообщения: 2
Зарегистрирован: 08 авг 2011, 05:45

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение Saldanet »

Но с ним же ссылка не выйдет или я что-то путаю?
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение bodnar »

какая ссылка? ты знаешь id пользователя, составить строку http://vkontakte.ru/id12345 когда 12345 ты знаешь сложно?
KonstantinGreat
Сообщения: 3
Зарегистрирован: 09 дек 2011, 13:25

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение KonstantinGreat »

использую данный код, но ничего не выводится, поля массивов пустые:( может кто подскажет, что делать
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение Александр »

KonstantinGreat
Убедись что верно передаешь все параметры.
KonstantinGreat
Сообщения: 3
Зарегистрирован: 09 дек 2011, 13:25

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение KonstantinGreat »

Александр
подключил сайт через http://vkontakte.ru/ (выставил галочку как приложение, а не как игра), поставил виджет 'Мне нравится' на страницу, использую код данной темы и файл для класса(предложенный тут же). But Nothing is working :( .
листинг страницы, которая находится на запрашиваемом url:

Код: Выделить всё

<html xmlns="http://www.w3.org/1999/xhtml"><head><script type="text/javascript" src="http://userapi.com/js/api/openapi.js?45"></script><script type="text/javascript">  VK.init({apiId: 2713129, onlyWidgets: true});</script></head><body > <div id="vk_like"></div><script type="text/javascript">VK.Widgets.Like("vk_like", {type: "full"});</script><?require 'vkapi.class.php'; $api_id = '2713129';$secret_key = 'hDziuj76u29Kj2oOCoKX'; $VK = new vkapi($api_id, $secret_key);$resp = $VK->api('likes.getList', array('type'=>'sitepage', 'owner_id'=>2713129, 'page_url'=>'http://likeyou.9pn.ru/')); echo 'Number of likes: '.$resp['response']['count'].'<br /><br />';if($resp['response']['count']==NULL)    echo "no likes".'<br />';echo 'users: '.$resp['response']['users'].'<br />';if($resp['response']['users']==NULL)    echo 'fuck off with users';?></body></html>
очень надо считать эти клики в другом месте, надеюсь на помощь, или посоветуйте как воспользоваться запросами через JS в стиле VK.Api.call(), только не отправляйте на 3 буквы и на сайт вконтакте для ознакомления с мануалами, заранее благодарен
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение Александр »

KonstantinGreat
Вот эту строчку напиши

Код: Выделить всё

print_r($resp); // раскомментировать эту строку, чтобы увидеть ответ от сервера
Что выводит?
KonstantinGreat
Сообщения: 3
Зарегистрирован: 09 дек 2011, 13:25

Re: Пользователи, кликнувшие по «Мне нравится» (likes.getList)

Сообщение KonstantinGreat »

Александр
пишет 1ку, причем в предложенном вами синтаксисе ничего не пишет, а вот в таком

Код: Выделить всё

 echo 'Answer of server: '.print_r($resp).'<br />'; 
пишет.
Ответить