Список id Вконтакте txt

Пишу бота для вк на vk_api. И столкнулся с проблемой, что не могу перебрать id пользователей для массовой рассылки. Пробовал перебор в разные места вставлять, но без успешно.

def rassilka(message): with open(‘all.txt’, ‘r’) as f: for i in f: user_id = f.readline(int(i)) vk.method(‘messages.send’, )

При вызове функции выдает ошибку

vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: you should specify peer_id, user_id, domain, chat_id or user_ids param

Читал в интернете про данную ошибку, но все без успешно. Ничего не помогло В файле all.txt хранятся id пользователей

Источник: ru.stackoverflow.com

Как узнать ID ВКонтакте на компьютере и на телефоне

mudachyo/findvkface

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Аналог Findface для небольших городов

Система состоит из нескольких скриптов — скачивает фото юзеров из профилей ВК в рамках одного указанного города, и создает базу биометрических данных этих лиц, связывая их с аккаунтами ВК.

Скрипты протестированы на Parrot OS и требуют установки модулей Python которые есть в разделах import у скриптов

Для того чтобы скрипты заработали клонируйте этот репозиторий и удалите из подкаталогов файлы README.MD — иначе они будут мешать работе скриптов

Скачайте этот файл https://cloud.mail.ru/public/2KGj/2pWSDbXZt и бросьте в папку с проектом

Как Узнать ID Своей Страницы в ВК на Компьютере в 2022 / Как Посмотреть АйДи Профиля в ВКонтакте

  1. VkIdsParser_1.py — впишите в скрипт ваш логин пароль ВК (с выключенной двухфакторной авторизацией)

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

Еще по теме:  Как удалить покемона в ВК

По итогам работы скрипта вы получите файлик ids.txt со списком ID ВК

  1. DownloadPhotosToJpg_2.py — впишите в скрипт ваш логин пароль ВК (с выключенной двухфакторной авторизацией)

скрипт берет данные из списка ids.txt и скачивает в папку jpg по нескольку фото с каждого аккаунта

Имена файлов ссответствуют id ВК

  1. JpgToNpy_3.py — Производит процесс сбора биометрических параметров лиц с фото в папке jpg и сохраняет их в паку npy в виде мелких файликов

При больших объемах фоток скрипт может работать достаточно долго (часы, дни)

Тем не менее его можно выключить в любой момент а при следующем запуске он начнет с того места где остановился

  1. FindIntoNpy_4.py — скрипт пытается найти среди файлов .npy в папке npy биометрию схожую с 1.jpg

Файл 1.jpg с искомым лицом нужно предварительно поместить в корневую директорию проекта

Данный скрипт ищет очень медленно из-за того что ему нужно перебрать все файлы .npy

Не рекомендуется использовать данный способ для поиска — только для проверки корректности создания .npy

  1. NpyToEmbeddingsBin_5.py — скрипт берет все файлы .npy из папки npy и создает на их основе файл embeddings.bin

Созданный файл по сути содержит биометрию всех ранее распознанных лиц и все файлы с папок jpg и npy после его создания уже не нужны

Помимо этого создается файл associations.txt в котором хранятся соответствия номеру записи в эмбединге и имени файла .npy из которого она была взята

  1. FinfFaceInEmbeddingsBin_6.py — пытается найти в базе лицо схожее с лицом на 1.jpg

Файл 1.jpg с искомым лицом нужно предварительно поместить в корневую директорию проекта

В отличии от скрипта номер 4 работает очень быстро.

Источник: github.com

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

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

Задача

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

Решение

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

Вк апи

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

  1. Парсить веб-страницу пользователя и вытаскивать нужную информацию
  2. Использовать vk api и обрабатывать json

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

Токены

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

Еще по теме:  Как настроить метрику на группу ВК

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

  1. Ручками регистрировать новых пользователей и получать токен
  2. Купить токены
  3. Сгенерировать токены с помощью библиотеки vk (pip install vk)

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

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

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

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

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

list_token=[] with open(‘tokens.txt’, ‘r’) as f: for line in f: list_token.append(str(line).rstrip(‘n’)) len(list_token)

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

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

!pip install asyncio !pip install aiohttp !pip install nest_asyncio

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

import asyncio from aiohttp import ClientSession import json import nest_asyncio nest_asyncio.apply() # Доступ к гугл диск from google.colab import drive drive.mount(‘/content/gdrive’) list_data=[] async def bound_fetch_zero(sem,id,session): async with sem: await fetch_zero(id,session) async def fetch_zero(id, session): url = build_url(id) try: async with session.get(url) as response: # Считываем json resp=await response.text() js=json.loads(resp) list_users=[x for x in js[‘response’] if x != False] # Проверяем если город=1(Москва) тогда добавляем в лист for it in list_users: try: if it[0][‘city’][‘id’]==1: list_data.append(it[0][‘id’]) except Exception: pass except Exception as ex: print(f’Error: ‘) # Генерация url к апи вк, 25 запросов в одном def build_url(id): api = ‘API.users.get(,’fields’:’city’>>)’.format( id * 25 + 1) for i in range(2, 26): api += ‘,API.users.get(,’fields’:’city’>>)’.format( id * 25 + i) url = ‘https://api.vk.com/method/execute?access_token=<>code=return%20[<>];’.format( list_token[id%len(list_token)], api) return url async def run_zero(id): tasks = [] sem = asyncio.Semaphore(1000) async with ClientSession() as session: # Значение 3200 зависит от вашего числа токенов for id in range((id — 1) * 3200, id * 3200): task = asyncio.ensure_future(bound_fetch_zero(sem,id, session)) tasks.append(task) responses = asyncio.gather(*tasks) await responses del responses await session.close() # Запускаем сборщик for i in range(0,17): for id in range(i*500+1,(i+1)*500+1): print(id) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(run_zero(id)) # Сохраняем айдишники в файл на гугл диске и очищаем лист with open(f’/content/gdrive/My Drive/data_main.txt’, ‘w’) as f: for item in list_data: f.write(f’n’) print(len(list_data)) list_data.clear()

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

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

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

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

# Генерация url к апи вк, 25 запросов в одном def build_url(id): api = ‘API.users.get(,’fields’:’city’>>)’.format( id * 25 + 1) for i in range(2, 26): api += ‘,API.users.get(,’fields’:’city’>>)’.format( id * 25 + i) url = ‘https://api.vk.com/method/execute?access_token=<>code=return%20[<>];’.format( list_token[id%len(list_token)], api) return url

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

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

Еще по теме:  Vk target что это

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

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

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

async def fetch_zero(id, session): url = build_url(id) try: async with session.get(url) as response: # Считываем json resp=await response.text() js=json.loads(resp) list_users=[x for x in js[‘response’] if x != False] # Проверяем если город=1(Москва) тогда добавляем в лист for it in list_users: try: if it[0][‘city’][‘id’]==1: list_data.append(it[0][‘id’]) except Exception: pass

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

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

# Запускаем сборщик for i in range(0,17): for id in range(i*500+1,(i+1)*500+1): print(id) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(run_zero(id)) # Сохраняем айдишники в файл на гугл диске и очищаем лист with open(f’/content/gdrive/My Drive/data_main.txt’, ‘w’) as f: for item in list_data: f.write(f’n’) print(len(list_data)) list_data.clear()

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

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

for id in range((id — 1) * 3200, id * 3200): task = asyncio.ensure_future(bound_fetch_zero(sem,id, session)) tasks.append(task)

Если у Вас не 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) и тд в первом цикле. В итоге за полтора часа я смог обработать всех пользователей вк.

with open(f’/content/gdrive/My Drive/data_main.txt’, ‘w’) as f: for item in list_data: f.write(f’n’)

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

Итоги

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

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

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

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

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

  • вконтакте
  • вк
  • быстрый поиск
  • вконтакте api
  • большие данные
  • python
  • google colab
  • поиск по всем пользователям
  • big data
  • асинхронные запросы
  • Python
  • Data Mining
  • ВКонтакте API
  • Big Data
  • Параллельное программирование

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...