В этом уроке показано:
- как получить список друзей (метод 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;
});
}
});
});
});
});
</script>/li>
</head>
<body>
<div id="uids_count"></div>
<div id="friends_list"></div>
</body>
</html>
В коде очень много комментариев. Если вам не понятно что такое splice, push и join в JavaScript, то прочтите документацию.