@Paul_Morte

VK API. Можно ли получить более 1000 ответов по поиску групп?

Как получить больше 1000 групп по запросу landing?

Получается вытащить более 1000 человек из группы, а вот при видоизменении кода для поиска групп не выходит получить более 1000 групп. Следующие значения после офсет + 1000 пустые.

var membersGroups = []; // массив участников группы
getMembers('Landing');

// получаем информацию о группе и её участников
function getMembers(group_id) {
	VK.Api.call('groups.search', {q: group_id,  v: '5.27'}, function(r) {
			if(r.response) {
				
				//console.log(r.response);
				
				$('.group_info').html( 'Всего групп: ' + r.response.count);
				
				alert(group_id+' --- ' + r.response.count);
				
				getMembers20k(group_id, parseFloat(r.response.count)); // получем участников группы и пишем в массив membersGroups
			}
	});
}







// получаем участников группы, members_count - количество участников
function getMembers20k(group_id, members_count) {
	var code =  'var members = API.groups.search({"q":"landing page", "v": "5.27",  "count": "1000", "offset": ' + membersGroups.length + '}).items@.id;' // делаем первый запрос и создаем массив
			+	'var offset = 1000;' // это сдвиг по участникам группы
			+	'while (offset < 1000 && (offset + ' + membersGroups.length + ') < ' + members_count + ')' // пока не получили 20000 и не прошлись по всем участникам
			+	'{'
				+	'members = members + "," + API.groups.search({"q":"landing page", "v": "5.27",  "count": "1000", "offset": (' + membersGroups.length + ' + offset)}).items@.id;' // сдвиг участников на offset + мощность массива
				+	'offset = offset + 1000;' // увеличиваем сдвиг на 1000
			+	'};'
			+	'return members;'; // вернуть массив members
	
	
	
	
	VK.Api.call("execute", {code: code}, function(data) {
			console.log(data);
		
		if (data.response) {

			
			
			membersGroups = membersGroups.concat(JSON.parse("[" + data.response + "]")); // запишем это в массив
			
			$('.member_ids').html('Загрузка: ' + membersGroups.length + '/' + members_count);
			if (members_count >  membersGroups.length) // если еще не всех участников получили
				setTimeout(function() { getMembers20k(group_id, members_count); }, 333); // задержка 0.333 с. после чего запустим еще раз
			else // если конец то
				alert('Ура тест закончен! В массиве membersGroups теперь ' + membersGroups.length + ' элементов.');
		
					//draw(membersGroups);
		} else {
			alert(data.error.error_msg); // в случае ошибки выведем её
			
		
		}
	});
}
  • Вопрос задан
  • 522 просмотра
Пригласить эксперта
Ответы на вопрос 1
zax2002
@zax2002
Юзай хранимые процедуры
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы