@SetAres

Повторный запрос users.search в цикле после смещения возвращает неполный ответ. Что не так?

Получаю количество пользователей из запроса. Если их больше 1000 (а их 21215) то в цикле пытаюсь используя смещение занести всех в dataGridView3

// получил количество пользователей
... 
if (user_count > 1000)
                {
                    do
                    {
                        USER_ID = GET_http(String.Format("https://api.vk.com/method/users.search.xml?" + request + "&offset=" + offset + "&count=1000&fields=photo_id&access_token={0}", Settings1.Default.token));
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(USER_ID);

                        XmlNodeList items = doc.SelectNodes("response/user/uid");

                        
                        foreach (XmlNode item in items)
                        {
                            k++;
                            if (item.LocalName == "uid")
                                dataGridView3.Rows.Add(item.FirstChild == null ? "" : k + ") " + item.FirstChild.Value, (item.NextSibling.InnerText == null ? "" : item.NextSibling.InnerText) + " " + (item.NextSibling.NextSibling.InnerText == null ? "" : item.NextSibling.NextSibling.InnerText), item.NextSibling.NextSibling.NextSibling == null ? "" : (item.NextSibling.NextSibling.NextSibling.InnerText == null ? "" : item.NextSibling.NextSibling.NextSibling.InnerText));
                        }
                        offset += 1000;
                        user_count -= 1000;

                        System.Threading.Thread.Sleep(50);
                    }
                    while (user_count > 0);

                }


Первый цикл возвращает нормальный ответ в формате с ID, first_name, last_name.
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<response list=\"true\">\n <count>21215</count>\n <user>\n  <uid>ид человека</uid>\n  <first_name> Имя </first_name>\n  <last_name>Фамилия</last_name>\n  <photo_id>ид фотки</photo_id>\n </user>\n ..... </response>\n"

Во втором проходе цикла do while после смещения на 1000 возвращается запрос вида:
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<response list=\"true\">\n <count>21215</count>\n</response>\n"
. После смещения возвращается кол-во участников группы, но возвращаются ID, first_name, last_name. D В чем может быть проблема?

Такая последовательность запросов выдает аналогичный результат. Первый ответ полный, второй только количество участников.
USER_ID = GET_http(String.Format("https://api.vk.com/method/users.search.xml?" + request + "&offset=0&count=1000&fields=photo_id&access_token={0}", Settings1.Default.token));
USER_ID = GET_http(String.Format("https://api.vk.com/method/users.search.xml?" + request + "&offset=1000&count=1000&fields=photo_id&access_token={0}", Settings1.Default.token));
  • Вопрос задан
  • 1047 просмотров
Решения вопроса 1
@FireGM
https://new.vk.com/dev/users.search

Обратите внимание — даже при использовании параметра offset для получения информации доступны только первые 1000 результатов.


Если ищите по группе, то следует использовать https://new.vk.com/dev/groups.getMembers
И проходить фильтром уже внутри вашего приложения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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