Users search vk api примеры python

Извиняюсь если вопрос очень глупый, только начал изучать python и vkapi. написал для поиска людей вот такой код:

import vk_api import vk vk = vk_api.VkApi(token=») session_api = vk.get_api() AGE_FROM = 16 AGE_TO = 50 CITY = 10 users = session_api.users.search(city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’) print(users)

Хочу сделать так, чтобы id пользователей которые выдаются записывались в какой-нибудь массив, чтобы в дальнейшем можно было взять id из этого массива и допустим отправлять сбщ людям из этого массива. Надеюсь корректно выложил свою мысль Пытался как-то так:

IDS=[session_api.users.get(users(id))] USER_IDS = (IDS) print(USER_IDS)

сделать это, чтобы хотя бы получить просто их id, но понимаю что очень это все плохо. За помощь начинающему питонисту буду очень благодарен

Отслеживать
23.1k 4 4 золотых знака 19 19 серебряных знаков 33 33 бронзовых знака
задан 3 мая 2019 в 14:54
73 7 7 бронзовых знаков
была попытка еще так написать IDS=[users.get(id)] USER_IDS = (IDS) print(USER_IDS)
3 мая 2019 в 14:59

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Учим vk api вместе #5 | Уроки vk api | Метод friends.Search

Вам нужно было обработать результат, приведу пример.

Метод users.search вернет словарь вида , ‘items’: [, , . > ваша минимальная задача из словаря вытащить id пользователей:

import vk_api vk = vk_api.VkApi(token=») api = vk.get_api() AGE_FROM = 16 AGE_TO = 50 CITY = 10 rs = api.users.search(city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’) #

PS.

Если вам нужно получить больше элементов (vk первоначально ограничивает параметром count из количество), то понадобится вооружиться циклом и перебрать записи через запросы.

Это будет выглядеть так:

. offset = 0 count = 1000 users_ids = [] while True: rs = api.users.search( city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’, offset=offset, count=count ) print(rs) # Если хоть один из параметров пустой if not rs[‘count’] or not rs[‘items’]: break users_ids += [user[‘id’] for user in rs[‘items’]] offset += count print(len(users_ids))

Но, к счастью, у vk_api есть отличная утилита для этой работы VkTools. С нею не нужно писать цикл, достаточно указать метод, его параметры и количество значений за раз:

Еще по теме:  Что то странное на Вконтакте

from vk_api import VkTools rs = VkTools(api).get_all( method=’users.search’, max_count=1000, values=< ‘city’: CITY, ‘age_from’: AGE_FROM, ‘age_to’: AGE_TO, ‘fields’: ‘domain’, >, ) print(len(rs[‘items’]))

Официальный пример для получения записей из стены с VkTools (этот код будет работать для запросов, у которых есть параметры count и offset , что подходит и для пользователей, и для записей со стены, и т.п.)

PPS

Похоже, vk не отдаст больше 1000 пользователей, поэтому если вам нужно получить больше, придется менять фильтр к запросу, чтобы было как можно больше вариантивности пользователей в ответе

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

VK API users.search поиск пользователей

Нужна помощь с vk-ботом

Извиняюсь если вопрос очень глупый, только начал изучать python и vkapi. написал для поиска людей вот такой код:

import vk_api import vk vk = vk_api.VkApi(token=») session_api = vk.get_api() AGE_FROM = 16 AGE_TO = 50 CITY = 10 users = session_api.users.search(city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’) print(users)

Хочу сделать так, чтобы id пользователей которые выдаются записывались в какой-нибудь массив, чтобы в дальнейшем можно было взять id из этого массива и допустим отправлять сбщ людям из этого массива. Надеюсь корректно выложил свою мысль

Пытался как-то так:

IDS=[session_api.users.get(users(id))] USER_IDS = (IDS) print(USER_IDS)

сделать это, чтобы хотя бы получить просто их id, но понимаю что очень это все плохо. За помощь начинающему питонисту буду очень благодарен

Ответы (1 шт):

Вам нужно было обработать результат, приведу пример.

Метод users.search вернет словарь вида , ‘items’: [, , . > ваша минимальная задача из словаря вытащить id пользователей:

import vk_api vk = vk_api.VkApi(token=») api = vk.get_api() AGE_FROM = 16 AGE_TO = 50 CITY = 10 rs = api.users.search(city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’) #

PS.

Если вам нужно получить больше элементов (vk первоначально ограничивает параметром count из количество), то понадобится вооружиться циклом и перебрать записи через запросы.

Это будет выглядеть так:

. offset = 0 count = 1000 users_ids = [] while True: rs = api.users.search( city=CITY, age_from=AGE_FROM, age_to=AGE_TO, fields=’domain’, offset=offset, count=count ) print(rs) # Если хоть один из параметров пустой if not rs[‘count’] or not rs[‘items’]: break users_ids += [user[‘id’] for user in rs[‘items’]] offset += count print(len(users_ids))

Еще по теме:  Как создать фейковый аккаунт в ВК

Но, к счастью, у vk_api есть отличная утилита для этой работы VkTools. С нею не нужно писать цикл, достаточно указать метод, его параметры и количество значений за раз:

from vk_api import VkTools rs = VkTools(api).get_all( method=’users.search’, max_count=1000, values=< ‘city’: CITY, ‘age_from’: AGE_FROM, ‘age_to’: AGE_TO, ‘fields’: ‘domain’, >, ) print(len(rs[‘items’]))

Официальный пример для получения записей из стены с VkTools (этот код будет работать для запросов, у которых есть параметры count и offset , что подходит и для пользователей, и для записей со стены, и т.п.)

PPS

Похоже, vk не отдаст больше 1000 пользователей, поэтому если вам нужно получить больше, придется менять фильтр к запросу, чтобы было как можно больше вариантивности пользователей в ответе

Источник: husl.ru

Сбор данных с помощью API Вконтакте

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

Важно: мы заметили, что при поиске по ФИ + ДР Вконтакте выдаст подходящих пользователей, даже если их дата рождения скрыта. Это можно было использовать, только нужно обеспечить связь с данными поискового запроса. Для работы с API VK мы решили использовать Python с библиотекой vk_api (установка: pip install vk_api). Итого нам потребуются 2 библиотеки:

import pandas as pd import vk_api

Далее – импорт входных данных в формате ID, Имя, Фамилия, Отчество (можно оставить пустым, так как Вконтакте отчество отсутствует), День рождения, Месяц рождения, Год рождения. Пример: (0,Петр,Петрович,,1,1,1950)

data = pd.read_csv(‘in.txt’, encoding = ‘cp1251’)

Затем авторизация и получение токена VK:

vk_session = vk_api.VkApi(‘+79XXXXXXXXXX’, ‘password’) vk_session.auth() vk = vk_session.get_api()

После этого мы можем начинать выполнять запросы к API. Полный перечень методов можно найти на странице vk.com/dev/methods.

Разберем для примера использование метода users.search и сохранение полученных результатов. Основные параметры это q – строка поискового запроса, так же для поиска нам понадобятся birth_day, birth_month, birth_year, count – количество результатов (поставим максимум – 1000), fields – список дополнительных полей, в примере укажем ‘bdate, city’. Результат будет возвращен в виде словаря Python. Разберем подробно:

Еще по теме:  Да это такой аватар Вконтакте

t=<> #создаем словарь для хранения данных, получаемых от API VK for j in range(0, len(data)): #запускаем поиск по массиву #Далее следует обращение к API с нашими параметрами: t[j]=vk.users.search(q = data[‘N’][j] + ‘ ‘ + data[‘F’][j], birth_day = data[‘D’][j], birth_month = data[‘M’][j], birth_year = data[‘Y’][j], count = 1000, fields=’bdate, city’) for h in (t[j][‘items’]): #Сохраняем результаты поиска в файл»users.txt» with open(‘users.txt’,’a’) as f1: f1.write((str(data[‘id’][j]) + ‘;’ #ID исходный + str(t[j][‘count’]) + ‘;’ #Количество найденных пользователей + str(h[‘id’]) + ‘;’ #ID пользователя VK + h[‘last_name’] + ‘;’ #Фамилия + h[‘first_name’] + ‘;’ #Имя + h.get(‘bdate’,») + ‘;’ #Дата рождения + h.get(‘city’,<>).get(‘title’,») #У города несколько параметров — нам нужно название: title + ‘;n’).encode(‘cp1251’, ‘replace’).decode(‘cp1251’))#Для удаления нестандартных символов, которые могут вызывать ошибки

Далее мы можем в этом же цикле осуществить поиск и сохранение ID друзей пользователя, за это отвечает метод friends.get. Если друзей нет (или скрыты), метод вернет ошибку, поэтому используем try/except:

try: m=vk.friends.get(user_id = str(h[‘id’]), count = 50000) for q in m[‘items’]: #Сохраняем ID друзей в файл «friends.txt» with open(‘friends.txt’,’a’) as f2: f2.write(str(data[‘id’][j]) + ‘;’ + str(h[‘id’]) + ‘;’ + str(q) + ‘;n’) except: #Если друзей нет (или скрыты) пишем в файл 0 для этого ID with open(‘friends.txt’,’a’) as f2: f2.write(str(data[‘id’][j]) + ‘;’ + str(h[‘id’]) + ‘;0;n’)

Если мы хотим выполнить большое количество запросов, нужно добавить паузу между ними, например, команда sleep библиотеки time.

Без этого учетная запись VK может быть заблокирована. Экспериментальным путем подобраны значения 9 секунд для поиска без друзей и 5 для поиска с друзьями (меньше, т.к. получение и сохранение списка друзей занимает несколько секунд). Производительность при использовании одной учетной записи Вконтакте составляет 8-10 тыс. пользователей в сутки. Полученные результаты сохраняются в файлы users.txt и friends.txt и могут в дальнейшем быть обработаны в БД или средствами Python.

Источник: newtechaudit.ru

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