@albertalexandrov

Как эффективнее получить список участников группы?

В продолжение предыдущего вопроса.

В общем, отказался от передачи кода алгоритма в VKScript (неудобно записывать код) в запросе и использовал хранимые процедуры. Код хранимой процедуры получился следующим:

var offset = parseInt(Args.offset);
var count = parseInt(Args.count);
var group_id = parseInt(Args.group_id);
if (group_id == 0) {
    group_id = Args.group_id;
}
var loop = 25;
var members = [];

while (offset < count && loop) { 
    members = members + API.groups.getMembers({"group_id": group_id, "offset": offset}).users;
    offset = offset + 1000;
    loop = loop - 1;
}

return {"offset": offset, "members": members};


Код python-скрипта:

response = requests.get(url=f"{VK_API}/groups.getMembers",
                        params={
                            "group_id": VK_GROUP_ID,
                            "access_token": VK_TOKEN,
                            "v": VK_V
                        }).json()["response"]

count = response["count"]
members = response["users"]
offset = 1000

while offset < count:
    response = requests.get(url=f"{VK_API}/execute.getMembers",
                            params={
                                "group_id": VK_GROUP_ID,
                                "count": count,
                                "offset": offset,
                                "access_token": VK_TOKEN,
                                "v": VK_V
                            }).json()["response"]

    offset = response["offset"]
    members += response["members"]


То есть сначала я делаю обычный запрос с той целью, чтобы узнать количество участников группы, а уже затем get-запросы к хранимой процедуре.

Может быть задачу получения списка участников группы можно реализовать корректнее?
  • Вопрос задан
  • 2490 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sgaynetdinov
Вам стоит обратить внимание на библиотеку py-vkontakte, которая позволяет работать с API vk.com.

$ pip install py-vkontakte

>>> import vk
>>> api = vk.Api(TOKEN)
>>> group = api.get_group('team')  # vk.com/team
>>> user_items = [user for user in group.get_members()]

Если нужно получить только `user_id`, можно использовать `group.get_members_only_id` и по скорости быстрее
>>> user_id_items = [user_id for user_id in group.get_members_only_id()]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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