Список друзей, не установивших приложение

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

Список друзей, не установивших приложение

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

Список друзей, не установивших приложение
JavaScript, массивы

В этом уроке показано:
- как получить список друзей (метод friends.get)
- как получить список друзей, которые установили приложение (метод friends.getAppUsers)
- как использовать цепочку методов, которые должны взаимодействовать с данными полученными в предыдущем методе
- как сравнить 2 массива и оставить только уникальные записи
- как выбрать id случайных друзей, исключая вероятность выбора одного и того же пользователя
- получение профилей пользователей (метод getProfiles)

Код html страницы

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

<html><head><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript" charset="cp1251" >window.onload = (function() {    VK.init(function() {        // выполняем запрос получения списка друзей        VK.api("friends.get", {}, function(dataAllFriends) {            // после получения списка друзей, выполняем запрос получения списка друзей установивших приложение            VK.api("friends.getAppUsers", {}, function(dataAppUsers) {                    // !!! ОБРАТИТЕ ВНИМАНИЕ, что вместо "data", привычной многим "просто-копипастерам-кода", используются dataAllFriends и dataAppUsers. Благодаря этому вторая переменная не перезапишет значение первой.                                        // узнаем количество друзей                    var frCount = dataAllFriends.response.length;                    // количество установивших приложение                    var appCount = dataAppUsers.response.length;                                        // создаём массив друзей, которые не установили приложение                    var noApp = dataAllFriends.response; // cначала записываем всех друзей в массив, дальше будем удалять из него установивших                                        if (appCount<frCount) { // если все друзья установили, то нет смысла и проверять                        // кол-во установивших приложение никогда не будет больше чем общее количество друзей, поэтому в первом цикле будем пробегаться по массиву установивших                        for (i=0;i<appCount;i++) {                            for(j=0;j<frCount;j++){                                // если нашли в массиве всех друзей тот, который в списке установивших - удаляем                                if (dataAppUsers.response[i]==noApp[j]) {                                    // вырезаем такой id                                    noApp.splice(j,1);                                    // прерываем цикл. Перебирать дальше нет смысла.                                    break;                                }                            }                        }                    }                                        // теперь в массиве noApp храняться id друзей, которые не установили приложение                    var noAppCount = noApp.length;                    document.getElementById('uids_count').innerHTML = 'Количество друзей, не установивших приложение: ' + noAppCount;                                        // выведем ссылки на профили трех из этих пользователей                    // смысл получать профили есть только если массив пользователей не пустой                    if (noAppCount>0) {                                         // если не установили приложение менее 4х друзей, то выведем только их                        if (noAppCount<4) {                            // просто превращаем массив пользователей в строку                            var noAppUids = noApp.join(',');                        } else {                            // выбираем случайных трёх, причем исключаем вероятность выбора одного и того же пользователя                            // сделаем это так: выберем одного и удалим его из массива и т.д.                            var uidCount = 3; // количество профилей                            var uidArr = []; // в этот массив запишем id                                                        for (i=0;i<uidCount;i++) {                                var max = noApp.length-1;                                var rand = Math.floor(Math.random()*max);                                uidArr.push(noApp[rand]);                                noApp.splice(rand,1);                            }                            // превращаем массив в строку                            noAppUids = uidArr.join(',');                        }                                                                                                VK.api("getProfiles", {uids:noAppUids,fields:"photo_rec"}, function(data) {                            // узнаем количество полученных профилей                            var profilesCount = data.response.length;                                                        // в эту переменную запишем html код для вывода списка пользователей                            var profilesStr = '';                                                        for (var i=0; i<profilesCount; i++) {                                profilesStr += '<a href="http://vk.com/id' + data.response[i].uid + '" title="' + data.response[i].first_name + ' ' + data.response[i].last_name + '" target="_blank"><img src="' + data.response[i].photo_rec + '" /></a> ';                            }                            document.getElementById('friends_list').innerHTML = profilesStr;                                                        // http://flapps.ru                        });                    }            });        });    });});</script></head><body><div id="uids_count"></div><div id="friends_list"></div><a href="http://flapps.ru">http://flapps.ru</a></body></html>
В коде очень много комментариев. Если вам не понятно что такое splice, push и join в JavaScript, то прочтите документацию.

Исходник http://flapps.ru/example/noAppUsers.rar
Аватара пользователя
a-kush-er
Сообщения: 10
Зарегистрирован: 01 авг 2011, 13:42

Re: Список друзей, не установивших приложение

Сообщение a-kush-er »

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

Re: Список друзей, не установивших приложение

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

a-kush-er
Ни один из друзей не установил приложение?
Аватара пользователя
a-kush-er
Сообщения: 10
Зарегистрирован: 01 авг 2011, 13:42

Re: Список друзей, не установивших приложение

Сообщение a-kush-er »

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

Re: Список друзей, не установивших приложение

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

a-kush-er
Метод friends.getAppUsers что возвращает?
Смотри с помощью Charles.
tkachka
Сообщения: 89
Зарегистрирован: 22 июл 2011, 22:16

Re: Список друзей, не установивших приложение

Сообщение tkachka »

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

Re: Список друзей, не установивших приложение

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

tkachka
Метод friends.getAppUsers что возвращает?
17 строчкой

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

alert(appCount);
что пишет?

35ой строчкой

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

alert(noApp.toString());
Что?

На каком этапе что-то идёт не так?
maksimn
Сообщения: 59
Зарегистрирован: 26 мар 2011, 10:46

Re: Список друзей, не установивших приложение

Сообщение maksimn »

У меня скрипт работает не правильно. Всего - 201 друг.

alert(appCount); выводит - 62.
alert(noApp.toString()); - выводит длинную строку с горизонтальным ползунком.

"Количество друзей, не установивших приложение: x" - выводит всех друзей (т.е. 201)

Charles возвращает:
По методу friends.get и friends.getAppUsers: {"response":[ID друзей через запятую]}.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Список друзей, не установивших приложение

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

maksimn
26 строка

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

if (dataAppUsers.response[i]==noApp[j]) {
Аватара пользователя
ukhov
Модератор
Модератор
Сообщения: 1343
Зарегистрирован: 04 янв 2011, 21:19

Re: Список друзей, не установивших приложение

Сообщение ukhov »

а можно ли вызвать окно приглашения друзей, вернее друга, по которому кликнул? в этом месте:

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

                                profilesStr += '<a href="http://vk.com/id' + data.response[i].uid + '" title="' + data.response[i].first_name + ' ' + data.response[i].last_name + '" target="_blank"><img src="' + data.response[i].photo_rec + '" /></a> ';
Ответить