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

Готовые уроки IFrame + ВКонтакте API

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

Сообщение Александр » 10 авг 2011, 21:35

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

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

Код html страницы
  1. <html>
  2. <head>
  3. <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>
  4. <script type="text/javascript" charset="cp1251" >
  5. window.onload = (function() {
  6.     VK.init(function() {
  7.         // выполняем запрос получения списка друзей
  8.         VK.api("friends.get", {}, function(dataAllFriends) {
  9.             // после получения списка друзей, выполняем запрос получения списка друзей установивших приложение
  10.             VK.api("friends.getAppUsers", {}, function(dataAppUsers) {
  11.                     // !!! ОБРАТИТЕ ВНИМАНИЕ, что вместо "data", привычной многим "просто-копипастерам-кода", используются dataAllFriends и dataAppUsers. Благодаря этому вторая переменная не перезапишет значение первой.
  12.                    
  13.                     // узнаем количество друзей
  14.                     var frCount = dataAllFriends.response.length;
  15.                     // количество установивших приложение
  16.                     var appCount = dataAppUsers.response.length;
  17.                    
  18.                     // создаём массив друзей, которые не установили приложение
  19.                     var noApp = dataAllFriends.response; // cначала записываем всех друзей в массив, дальше будем удалять из него установивших
  20.                    
  21.                     if (appCount<frCount) { // если все друзья установили, то нет смысла и проверять
  22.                         // кол-во установивших приложение никогда не будет больше чем общее количество друзей, поэтому в первом цикле будем пробегаться по массиву установивших
  23.                         for (i=0;i<appCount;i++) {
  24.                             for(j=0;j<frCount;j++){
  25.                                 // если нашли в массиве всех друзей тот, который в списке установивших - удаляем
  26.                                 if (dataAppUsers.response[i]==noApp[j]) {
  27.                                     // вырезаем такой id
  28.                                     noApp.splice(j,1);
  29.                                     // прерываем цикл. Перебирать дальше нет смысла.
  30.                                     break;
  31.                                 }
  32.                             }
  33.                         }
  34.                     }
  35.                    
  36.                     // теперь в массиве noApp храняться id друзей, которые не установили приложение
  37.                     var noAppCount = noApp.length;
  38.                     document.getElementById('uids_count').innerHTML = 'Количество друзей, не установивших приложение: ' + noAppCount;
  39.                    
  40.                     // выведем ссылки на профили трех из этих пользователей
  41.                     // смысл получать профили есть только если массив пользователей не пустой
  42.                     if (noAppCount>0) {                
  43.                         // если не установили приложение менее 4х друзей, то выведем только их
  44.                         if (noAppCount<4) {
  45.                             // просто превращаем массив пользователей в строку
  46.                             var noAppUids = noApp.join(',');
  47.                         } else {
  48.                             // выбираем случайных трёх, причем исключаем вероятность выбора одного и того же пользователя
  49.                             // сделаем это так: выберем одного и удалим его из массива и т.д.
  50.                             var uidCount = 3; // количество профилей
  51.                             var uidArr = []; // в этот массив запишем id
  52.                            
  53.                             for (i=0;i<uidCount;i++) {
  54.                                 var max = noApp.length-1;
  55.                                 var rand = Math.floor(Math.random()*max);
  56.                                 uidArr.push(noApp[rand]);
  57.                                 noApp.splice(rand,1);
  58.                             }
  59.                             // превращаем массив в строку
  60.                             noAppUids = uidArr.join(',');
  61.                         }
  62.                        
  63.                        
  64.                        
  65.                         VK.api("getProfiles", {uids:noAppUids,fields:"photo_rec"}, function(data) {
  66.                             // узнаем количество полученных профилей
  67.                             var profilesCount = data.response.length;
  68.                            
  69.                             // в эту переменную запишем html код для вывода списка пользователей
  70.                             var profilesStr = '';
  71.                            
  72.                             for (var i=0; i<profilesCount; i++) {
  73.                                 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> ';
  74.                             }
  75.                             document.getElementById('friends_list').innerHTML = profilesStr;
  76.                            
  77.                             // http://flapps.ru
  78.                         });
  79.                     }
  80.             });
  81.         });
  82.     });
  83. });
  84. </script>
  85. </head>
  86. <body>
  87. <div id="uids_count"></div>
  88. <div id="friends_list"></div>
  89. <a href="http://flapps.ru">http://flapps.ru</a>
  90. </body>
  91. </html>


В коде очень много комментариев. Если вам не понятно что такое splice, push и join в JavaScript, то прочтите документацию.

Исходник Чтобы увидеть ссылку - зарегистрируйтесь

За это сообщение автора Александр поблагодарил:
ukhov
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение a-kush-er » 14 авг 2011, 04:47

в тексте "Количество друзей, не установивших приложение: x", показывает число, равное количеству друзей пользователя
Аватара пользователя
a-kush-er

 
Сообщения: 10
Зарегистрирован: 01 авг 2011, 13:42
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 14 авг 2011, 21:25

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

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

Сообщение a-kush-er » 15 авг 2011, 01:38

Александр
В том и дело, что в приложении на данный момент только друзья.
Не понимаю в чем ошибка.
Аватара пользователя
a-kush-er

 
Сообщения: 10
Зарегистрирован: 01 авг 2011, 13:42
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 15 авг 2011, 22:38

a-kush-er
Метод friends.getAppUsers что возвращает?
Смотри с помощью Charles.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение tkachka » 16 авг 2011, 14:10

Александр писал(а):a-kush-er
Ни один из друзей не установил приложение?


у меня тоже самое выдает - хотя точно знаю. что у пятерых точно установлено
tkachka

 
Сообщения: 89
Зарегистрирован: 22 июл 2011, 22:16
Благодарил (а): 13 раз.
Поблагодарили: 4 раз.

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

Сообщение Александр » 17 авг 2011, 21:08

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

что пишет?

35ой строчкой

Что?

На каком этапе что-то идёт не так?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение maksimn » 24 сен 2011, 19:35

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

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

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

Charles возвращает:
По методу friends.get и friends.getAppUsers: {"response":[ID друзей через запятую]}.
maksimn

 
Сообщения: 59
Зарегистрирован: 26 мар 2011, 10:46
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.

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

Сообщение Александр » 24 сен 2011, 20:31

maksimn
26 строка
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение ukhov » 25 сен 2011, 09:09

а можно ли вызвать окно приглашения друзей, вернее друга, по которому кликнул? в этом месте:
  1.                                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> ';
Изображение
Аватара пользователя
ukhov
Модератор
Модератор
 
Сообщения: 1343
Зарегистрирован: 04 янв 2011, 21:19
Откуда: Санкт-Петербург
Благодарил (а): 85 раз.
Поблагодарили: 155 раз.

След.

Вернуться в Уроки IFrame ВКонтакте



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron