24 January 2015

Получение участников сообщества vk.com за считанные секунды

VK API
Tutorial
Ни для кого не секрет, что VK API возвращает за один запрос к методу groups.getMembers не более 1 000 участников. В одну секунду вы можете получить максимум 3 000 участников, так как установлено ограничение на количество запросов в секунду до 3. Эту проблему решает метод execute, с помощью которого вы можете получить более 100 000 участников за одну секунду и до 25 000 участников за один запрос. В этой статье я расскажу Вам, как я это реализовал.

Без использования метода execute, процесс получения участников группы с аудиторией в 4 000 000 человек займет примерно около 22 минут, и нам нужно будет выполнить около 4 000 запросов к API. С помощью метода execute мы ускорим этот процесс примерно до 40 секунд и выполним всего около 160 запросов.

Содержание:



I. Немного о execute


Это универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты.
Делается обычный запрос как и на все другие методы, но в параметрах нужно передать code написанный на VKScript.

Что поддерживает VKScript и что это?


Это язык похожий на JavaSсript или ActionScript. Алгоритм должен завершаться командой return %выражение%. Операторы должны быть разделены точкой с запятой.

Поддерживаются:
  • арифметические операции
  • логические операции
  • создание массивов и списков ([X,Y])
  • parseInt и parseDouble
  • конкатенация (+)
  • конструкция if
  • фильтр массива по параметру (@.)
  • вызовы методов API, параметр length
  • циклы, используя оператор while
  • методы Javascript: slice, push, pop, shift, unshift, splice, substr
  • оператор delete
  • присваивания элементам массива, например: row.user.action = «test»;


С помощью этого метода, мы можем получить результат нескольких методов за один запрос API.

II. Реализация на javascript



Пишем простую функцию которая рекурсий будет дергать процедуру описанную ниже execute.getMembers.
getMembers(group_id);


Чтобы получить участников группы мы будем использовать execute, за один запрос мы получим 25 000 участников. Execute позволяет сделать до 25 запросов описанных с помощью языка VKScript. В параметре code нам нужно передать алгоритм на языке VKScript.

Создана процедура getMembers, которую мы будем дергать с клиента 3 раза в секунду.
var members = API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": Args.offset}).items; // делаем первый запрос и создаем массив
var offset = 1000; // это сдвиг по участникам группы
while (offset < 25000 && (offset + Args.offset) < Args.total_count) // пока не получили 20000 и не прошлись по всем участникам
{
  members = members + "," + API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": (Args.offset + offset)}).items; // сдвиг участников на offset + мощность массива
  offset = offset + 1000; // увеличиваем сдвиг на 1000
};
return members;


Исходники и примеры


На случай если лежит VK, то выглядело так:
image

Пример работы: http://vk.com/app4236781
Исходники: github.com/romkagolovadvayha/getmembersVKAPI.git
Tags:api vkexecuteучастники группы
Hubs: VK API
+29
105.9k 381
Comments 26