Как сгенерировать несколько токенов vk api python
Перейти к содержимому

Как сгенерировать несколько токенов vk api python

  • автор:

Как сгенерировать пользовательские токены для запросов к vk api

Пытаюсь обойди ограничение vk api users.search в 1000 человек. Идея решения использовать vk api exec.

Для этого использую vk_api.VkFunction

Данное решение позволяет получить сведения о пользователях в промежутке за 7 лет, можно довести до 14, дальше идет ограничение и с одним токеном больше не вытащить. Знаю, что можно сгенерировать токены, упоминание об этом в этой статье.

Вопрос: Как генерировать токены имея только одну пару login_vk, password_vk ?

Name already in use

vkbottle / docs / low-level / api / token-generator.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

2 contributors

Users who have contributed to this file

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

У VK существуют лимиты на запросы, но эти лимиты легко обходятся при наличии нескольких токенов, для того чтобы автоматически распределять токены на каждый запрос используются токен генераторы, существуют 2 вида генераторов из коробки:

SingleTokenGenerator — используется один токен на все запросы, принимает строку

ConsistentTokenGenerator — используется несколько токенов поочередно, если вы хотите его использовать грамотно, необходимо рассчитать нагрузку по времени, лимит вконтакте на запросы для ботов — 25/сек, для пользователей — 3/сек, принимает лист из строк

По правилам vkbottle вы конечно же можете реализовать свой генератор, базируясь на интерфейсе ABCTokenGenerator

Быстрый поиск по всем пользователям ВК

Решили на днях поучаствовать в одном Хакатоне, который мы, конечно же, не выиграем. И одной из задач было создание датасета из социальной сети Вконтакте. Долго не думая, я сказал товарищам по команде, что беру эту часть на себя. Но оказалось все не так просто. Хочу поделиться с Вами какие проблемы встретились и как я их по ходу решал.

Задача

Нужно пройтись по 650 000 000 пользователям ВК и вытащить только тех, кто живет в Москве. Затем отдельно обработать уже полученные айдишники.

Решение

Ну чтож задача понятна, нужно ее как-то решать. Писать код будем на языке Python и сразу подумал, что на своем компе это обрабатывать не стоит, а будем использовать мощности Google Colab. Ссылка на полный код проекта гугл колаб будет в конце.

Вк апи

Чтобы получить данные пользователя есть два путя:

Парсить веб-страницу пользователя и вытаскивать нужную информацию

Использовать vk api и обрабатывать json

Оба вариант имеют свои подводные камни. В первом варианте слишком много лишней информации, что замедляет в разы обработку. Во втором варианте проблема в токенах и ограничениях. Я все-таки решил пойти вторым путем.

Токены

Главная и первая проблема в ограничениях вк апи: 5 запросов в секунду для одного токена.

Для того чтобы обойти это ограничение, нам понадобится много токенов. Есть три варианта как их получить:

Ручками регистрировать новых пользователей и получать токен

Сгенерировать токены с помощью библиотеки vk (pip install vk)

В итоге я сгенерировал 1000 токенов, используя библиотеку. Не буду тут выкладывать код генерации токенов (это и так толстая подсказка), если все-таки не догадаетесь, то напишите в личку скину скрипт.

Сохраняем токены в txt файл, каждый токен с новой строчки.

Время говнокодить

Когда файл с токенами получен, можем приступать к коду. Загружаем в гугл колаб файл.

Считываем файл tokens.txt и добавляем токены в лист:

Сделать 650 000 000 запросов быстро без асинхронности мы никак не сможем. Я перепробовал много разных библиотек и максимальную скорость мне удалось выбить, используя библиотеку aiohttp.

Устанавливаем библиотеки для асинхронных запросов:

А вот и сам сборщик:

Разберем по блокам, чтобы было понятнее что тут происходит.

Начнем с метода def build_url(id)

У вк апи есть фича execute, которая позволяет делать 25 запросов в одном

Execute — универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты

Вот так выглядит итоговый запрос:

Если вам нужно вызывать другие методы вк апи, то просто замените ‘API.users.get(<<\'user_ids\':<>,\’fields\’:\’city\’>>)’ на нужный метод и данные.

Вот такой json мы получаем при вызове всего одно запроса:

Метод def fetch_zero(id, session)

В этом методе происходит сама обработка данных:

Считываем json, проходим по всем пользователям из запроса и проверям поле город, можно заменить на любой другой город (1 — Москва, 2 — Питер и тд) и вытащить айдишники всех пользователей своего города. Тут https://vk.com/dev/database.getCities все айдишники городов.

Запускаем сборщик

Вот тут уже начинается математика)

Два цикла, первый с 0 по 16 включительно, второй 500 итераций + эти 3200:

Если у Вас не 1000 токенов, а 10 например, то значение 3200 нужно заменить на 40 максимум, этот цикл отвечает сколько сразу будет сделано асинхронных запросов, и если указать больше, то будет выскакивать то самое ограничение в 5 запросов в секунду.

В итоге 16 * 500 * 3200 * 25 (в 1 запросе 25 id)= 640 000 000 айдишников мы пройдем с id1 по конечный.

Зачем вы наверн подумаете столько циклов, а это нужно чтобы запустить обработку параллельно. Я запустил 5 сеансов в google colab с разным range(0,4), range(4,8) и тд в первом цикле. В итоге за полтора часа я смог обработать всех пользователей вк.

И на каждой итерации мы сохраняем полученные айдишники в файл, всего получится 16 файлов, которые потом нужно объединить в один.

Итоги

За полтора часа работы сборщика на 5 сеансах гугл колаб можно вытащить любые открытые данные пользователей Вк (У vk api есть и другие ограничения, так что к некоторым методам нужно будет придумывать новые законные обходы). Вот ссылка на код проекта в Google Colab:

И вот ссылка на датасет всех москвичей из всего вк, которые я вытащил, написав этого сборщика, можете себя найти там, если указывали москву в вк)

Из 650 млн. пользователей официальных москвичей 24 593 238.

Что ж, надеюсь кому-то будет интересна данная статья и мои наработки будут полезны.

Меня в декабре забирают в армию, так что видимо это последняя статья. Хотел еще пару своих проектов описать на Хабре, но видимо уже не успею. Всем позитива и удачи.

Как получить Access Token Вконтакте за 5 Секунд!

Для взаимодействия с соц сетью Вконтакте по API нужно иметь «Access Token». Access Token можно получить «в ручную» прочитав официальную справку где расскажут как это сделать. Процесс не особо-то и сложный, скорее нудный и может вызвать вопросы у человека, который получает Access Token в первые.

Инструкция в сети, как получить Access Token Вконтакте полно, где по шагам расскажут как его получить, но это займет время. Есть способ куда круче и быстрее!

Получаем Access Token Вконтакте за 5 Сек.

Сразу скажу, нужно установить Python 3! Для python есть замечательный модуль «vk_api». Он нужен, как не странно, что бы юзать ВК API. Но сегодня мы будем использовать этот модуль не для того, что бы общаться с соц сетью по API а для того что бы просто получить Access Token.

Для этого был записан такой скрипт.

Модуль «VkApi» можно использовать по разному. А именно способ авторизации, либо по логину и паролю либо по токену.

Да к вот, Если использовать способ авторизации по логину и паролю, то модуль «VkApi» сам получит «Access Token» и сохранит его в файл «vk_config.v2.json» далее просто нужно найти сам Token в этом файле, что и делает выше приведённый скрипт.

Далее Token будет выведен в консоль, а файл «vk_config.v2.json» удалён, либо он уже и не нужен. Теперь можно использовать полученный Access Token где вам нужно.

Важно.

Да! Нужно указать в скрипте свой логин и пароль. Если вас это как-то волнует, то используйте офф справку ВК и все.

Что бы все работало, по мимо Python 3 нужно установить менеджер пакетов PIP и сам модуль vk_api через менеджер pip. Как это сделать, очень просто, в google инфы полно, но если что, пишите мне в телегу.

Ссылки

Если лень ставить Python…

И вообще Вам нужно просто получить Access Token и не замарачиваться… На этот случай я скомпили в EXE выше приведённый код.

получить Access Token программа

Запускаем «access_token.exe» вводим логин, жмем Enter после вводим пароль, опять Enter и получаем Access Token Вконтакте. Быстро и просто!

  • PySpeedTest Как узнать Скорость соединения в PythonPySpeedTest Как узнать Скорость соединения в Python
  • Nuitka — Библиотека для трансляции кода на python в С и компиляции в exeNuitka — Библиотека для трансляции кода на python в С и компиляции в exe
  • Pafy — Библиотека для скачивания видео с YouTube
  • Instabot — модуль для Python, который реализует обертку над API InstagramInstabot — модуль для Python, который реализует обертку над API Instagram
  • Python-Cptchnet — Модуль для работы с API сервиса Cptch.netPython-Cptchnet — Модуль для работы с API сервиса Cptch.net
  • pyTelegramBotAPI Библиотека для создание Ботов TelegrampyTelegramBotAPI Библиотека для создание Ботов Telegram

Если есть возможность — поддержать нас: будем очень признательны. Денежные средства пойдут на дальнейшее развитие проекта!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *