sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux

Как получить пользователей ВК?

В API есть метод users.search
который сделает всю нужную работу, но там же есть ограничение что можно получить только первые 1000 пользователей, даже если использовать параметр offset то все равно можно получить только лишь первые. Есть ли вариант обойти эту цифру в 1000 пользователей?
Есть вариант получать только тех кто находится сейчас онлайн, и периодически добавлять новых в свою базу, потому что те кто давно не заходил, находить и не нужно, но эта 1000 все равно смущает, можно предположить что сидеть будут одни и те же, и я так в один момент перестану находить новых.
Есть вариант один раз запросить с сортировкой по дате регистрации, второй раз по популярности, немного спасает но не полностью.
Еще есть вариант запрашивать разных возрастов, это вариант уже существенно спасает, в принципе...свою проблему решил наверное, но может быть у вас свои какие мысли есть.
  • Вопрос задан
  • 626 просмотров
Решения вопроса 3
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
использовать фильтры и парсить по 1000 с каждой комбинации фильтров.
Ответ написан
@Impeeeery
жуй. куй.
взять один из последних vk.com/id******** и в цикле долго и упорно идти вниз, получая информацию не через users.search, а через users.get, а скорее вообще не через API, а парсингом.
Ответ написан
Комментировать
userfordownload
@userfordownload
VK не так просто ограничили API.
есть execute, который упростит в 25 раз все, НО только в 25 (опять же ограничение вк).
Для парсинга всех пользователей ВК нужно только время)
Придется сначала подождать, пока всех спарсит) а потом только добавлять новых.

НАПРИМЕР:
Этот код парсит лайки с записи на стене и анализирует пол(м/ж).
while ($cur_offset < $_offset){

 $_12000  = $cur_offset + 12000;
 $_test = $_vkapi -> execute (
                            'var members = [];'. 
                            'var obj =[];'.
                            'var offset ='.$cur_offset.';' .
                            'while (offset < '.$_12000.')'. 
                            '{'.
                            'members =  API.likes.getList({"type":"post","owner_id":'.$_id_gr.',"item_id":'.$_id_post.',"count":1000,"offset": offset}).items;'.
                            'obj = obj + API.users.get({"user_ids":members,"fields":"sex, bdate, city, country"});'.
                            'offset = offset + 1000;'.
                            '};'.
                            'return obj;'
  );

  $_resp =json_decode($_test);
  foreach ($_resp->response as $_anse) {
     
      if (is_int($_anse ->sex)) {
        $_sex = (int) ($_anse ->sex);
        switch ($_sex) {
            case 0:
                $_other++;
                break;
            case 1:
                $female++;
                break;
            case 2:
                $male++; 
                break;    
            default:
                //$_other++;
                break;
       }
     }else{
       $_other++;  
     }
  } 
}


Время на
40000 лайков - 13 секунд.
400000 лайков - 130секунд.
и так далее...
Быстрее ВК никак такой объем данных не отправляет) Поэтому только парсить API и ждать.
[ 13:16:59] Text: $female=5115 $male=6885 $_other=0 $itogo=12000
[ 13:17:12 ] Text: $female=15588 $male=23570 $_other=6 $itogo=39158


ПОЭТОМУ Многопото́чность - выход.!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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