Ни для кого не секрет, что 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 запросов.
Содержание:
Это универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты.
Делается обычный запрос как и на все другие методы, но в параметрах нужно передать code написанный на VKScript.
Это язык похожий на JavaSсript или ActionScript. Алгоритм должен завершаться командой return %выражение%. Операторы должны быть разделены точкой с запятой.
Поддерживаются:
С помощью этого метода, мы можем получить результат нескольких методов за один запрос API.
Пишем простую функцию которая рекурсий будет дергать процедуру описанную ниже execute.getMembers.
Чтобы получить участников группы мы будем использовать execute, за один запрос мы получим 25 000 участников. Execute позволяет сделать до 25 запросов описанных с помощью языка VKScript. В параметре code нам нужно передать алгоритм на языке VKScript.
Создана процедура getMembers, которую мы будем дергать с клиента 3 раза в секунду.
На случай если лежит VK, то выглядело так:
Пример работы: http://vk.com/app4236781
Исходники: github.com/romkagolovadvayha/getmembersVKAPI.git
Без использования метода 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, то выглядело так:
Пример работы: http://vk.com/app4236781
Исходники: github.com/romkagolovadvayha/getmembersVKAPI.git