Как получить информацию о пользователе ВКонтакте
В этой статье мы расскажем вам, как получить информацию о пользователе с помощью API ВКонтакте.
Базовые данные, такие как имя пользователя, фамилию и ID вы можете получить с помощью переменной $rawRequest. А чтобы получить дополнительную информацию, такую как, например, дата рождения пользователя и номер телефона, воспользуемся API ВКонтакте. В данной статье мы приведем пример того, как можно использовать API ВКонтакте. Вы можете найти документацию по использованию API ВКонтакте здесь: https://vk.com/dev/first_guide
API (application programming interface) — это посредник между разработчиком приложений и какой-либо средой, с которой это приложение должно взаимодействовать. API упрощает создание кода, поскольку предоставляет набор готовых классов, функций или структур для работы с имеющимися данными.
| Если ваш бот опубликован не только в ВКонтакте, но и в другом канале, то вы можете использовать системную переменную $channelType для определения канала.
Тестировать описанную в этой инструкции функциональность нужно в ВКонтакте! Если вы будете использовать описанную ниже функциональность и тестировать ее в тестовом виджете Aimylogic, вы будете получать ошибку, так как бот пытается использовать API ВКонтакте и, естественно, не может при тестировании не в ВКонтакте.
Прежде чем приступить к выполнению инструкции, создайте базовый сценарий, состоящий из парочки текстовых экранов (приветствие + фразы для принятия ввода пользователя), и опубликуйте его в ВКонтакте, как описано в данной инструкции.
Как узнать страну пользователя?
| Обратите внимание, что мы увидим эти данные только если они указаны в профиле и не закрыты настройками приватности. Если пользователь не указал страну или данные доступны для ограниченного круга лиц, мы не сможем получить доступ к этой информации.
Подключили канал ВКонтакте? Тогда приступим.
Попробуем получить информацию о стране пользователя.
- На экран приветствия в вашем сценарии добавьте блок «Переход» и соедините его с блоком условий, с помощью которого будем получать ID пользователя: $id = $rawRequest.object.user_id

- От блока условий сделаем связь с HTTP-запросом, чтобы получить страну пользователя из информации о странице вк:

- Вот как будет выглядеть этот HTTP-запрос:

- Метод — GET.
- Вкладка RESPONSE HTTP-запроса должна содержать:Имя переменной $country Значение $httpResponse.response[0].country.title
- Вкладки BODY и HEADERS заполнять не нужно.
- URL нашего запроса выглядит так: https://api.vk.com/method/users.get?user_ids=$&fields=country&access_token=ACCESS_TOKEN&v=5.101
Скопируйте этот URL, подставив вместо ACCESS_TOKEN ключ, который вы получили на этапе добавления бота в сообщество. Вы всегда можете заново получить этот токен в настройках сообщества: Настройки — Работа с API — Ключи доступа. Подробнее о добавлении канала ВКонтакте.

| Больше ничего менять в этом URL не нужно.
Разберемся в структуре этого URL

Нижеследующее объяснение может помочь вам понять, как использовать API ВКонтакте.
- Мы используем метод users.get. Вы можете почитать об этом методе здесь.* Так как мы до этого получили ID пользователя с помощью блока условий, наш запрос содержит следующее значение: user_ids=$ вместо будет подставлен реальный идентификатор пользователя ВКонтакте.* Мы используем параметр fields метода users.get* в параметре fields мы используем значение country. Это также определено документацией API ВКонтакте.* access_token определяет токен нашего канала. Поэтому вместо ACCESS_TOKEN нужно вставить ключ, полученный из ВКонтакте.* И, наконец, 5.101 — это последняя версия протокола API ВКонтакте. Вам нужно указать актуальную версию протокола API ВКонтакте. Посмотреть, какая версия является актуальной на данный момент, вы можете здесь (самая верхняя версия — актуальная): https://vk.com/dev/versions
У вас может получиться такой url:

Нам нужно присвоить все полученные значения соответствующим переменным, что мы и делаем, добавляя переменную в Http-запрос на вкладке RESPONSE и записывая в эту переменную полученную информацию.
- От блока «Завершен с ошибкой» добавим связь с текстовым блоком со следующим содержанием: Ошибка $httpStatus

Этот блок поможет нам понять, в чем ошибка, если запрос не будет успешным.
Если вы получаете ошибку, вернитесь к пункту 3 и убедитесь, что вы правильно оформили запрос.
- Убедимся, что мы получили эту информацию от пользователя
Далее, проверим, получили ли мы эту информацию — указана ли страна у данного пользователя, и не закрыта ли эта информация настройками приватности. Свяжем вариант «Завершен успешно» HTTP-запроса с блоком условие, в котором пропишем: $country

мы пишем здесь ту же переменную, которую указали в HTTP-запросе:

- Если это условие выполняется, можем продвигаться по сценарию (далее будем добавлять HTTP-запрос). А если нет (вариант else) добавим текстовый блок с вопросом о стране проживания.

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

Блок HTTP-запрос, в котором будем склонять название страны, будет выглядеть так:Url: http://ws3.morpher.ru/russian/declension?s=$&format=json

Здесь мы в фигурных скобках указали название переменной, содержание которой будем склонять. В нашем случае это переменная $country, но вы можете склонять значение любой другой переменной.Имя переменной: $newcountry — запишем полученный от морфера массив в эту переменнуюЗначение: $httpResponse
- Далее, после варианта «Выполнен успешно», сделаем связь с текстовым блоком, содержащим следующее: Ты живешь в $newcountry.П, верно?

Сервис morpher.ru будет склонять название страны. Нам нужно выбрать, какой нам нужен падеж. В данном случае нам нужен Предложный падеж, поэтому пишем $newcountry.П. Вы можете посмотреть содержание массива, который выдает morpher.ru, если пройдете по ссылке: http://ws3.morpher.ru/russian/declension?s=Россия&format=json
Вместо «Россия» вы можете подставить любое другое слово и увидеть парадигму склонения. Выберите букву, соответствующую нужному вам падежу.
Как получить другие данные?
Вы можете запрашивать другие данные, используя метод users.get. Следуйте шагам из инструкции по получению страны пользователя, за исключением нижеследующих изменений.
Как запросить дату рождения?

URL для получения даты рождения: https://api.vk.com/method/users.get?user_ids=$&fields=bdate&access_token=ACCESSTOKEN&v=5.101
Здесь мы используем параметр bdate метода users.get.
Имя переменной: bd Значение: $httpResponse.response[0].bdate
Далее, аналогично случаю со страной:


Как запросить номер телефона?
URL запроса — https://api.vk.com/method/users.get?user_ids=$&fields=contacts&access_token=ACCESSTOKEN&v=5.101
Имя переменной $cellphone Значение $httpResponse.response[0].mobile_phone
Вы можете получить номер телефона и город, если пропишете в HTTP
- Далее, выдаем полученные данные с помощью обычного текстового блока.

Твоя страна — $country.response[0].country.titleТвой день рождения — $bd.response[0].bdateТвой город — $city.response[0].city.titleТвой телефон — $cellphone.response[0].mobile_phone
Впоследствии, вы можете дорабатывать сценарий, продумывая логику перехода в зависимости от значений этих переменных.
Сбор данных с помощью API Вконтакте
Давайте поговорим о том, как используя API, вы можете получить и отсортировать данные всего несколькими командами. В продолжение темы сбора данных из социальной сети Вконтакте, хотим поделиться своим опытом по поиску пользователей и их друзей.
15K открытий
Так вот, сделав несколько пробных выборок для анализа, мы поняли, что поиск по фамилии и имени дает слишком ненадежные результаты, т.к. даты рождения многих пользователей скрыты, и даже выгрузив все совпадения по ФИ, вы все равно не сможете потом идентифицировать нужные данные.
Важно: мы заметили, что при поиске по ФИ + ДР Вконтакте выдаст подходящих пользователей, даже если их дата рождения скрыта. Это можно было использовать, только нужно обеспечить связь с данными поискового запроса. Для работы с 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.
Разберем для примера использование метода 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.
Метод account.getProfileInfo, как получить имя, фамилию и пол пользователя? Python
Так же как вы получили имя и фамилию. Поле называется sex. Читайте документацию к API и жизнь сразу станет легче! vk_com/dev/objects/user и vk_com/dev/objects/user_2 (замените подчеркивание на точку, а то антиспам тупит)
MalinkaУченик (81) 3 года назад
можешь написать пример, если не сложно, не могу разобраться, буду очень признателен
elancГуру (2763) 3 года назад
sex = user[0][‘sex’], а там уже 0 — не указан, 1 — женский, 2 — мужской
Malinka Ученик (81) elanc, вот что выводит переменная user [] из этого словаря и выводится имя и фамилия, поэтому я не пойму как мне вывести пол и другую информацию
elancГуру (2763) 3 года назад
Ваш самый главный помощник — поисковик, на само деле.. Почитай этот материал — https://python-scripts.com/try-except-finally
Просто мой родной язык Си.. На остальном я пишу исключительно с помощью гугля и stackoverflow.. =)
Malinka Ученик (81) elanc, ААА, я не умею просто правильно подойти к своей проблеме, во второй раз выручил, разобрался и все работает, спасибо тебе большое, ты есть в вк?
Как получить имя пользователя через vkbot_longpoll?
Здравствуйте, не понимаю как можно получить имя пользователя вступившего в беседу ВК через vkbot_longpoll. Может быть есть какие то методы? Я пробовал через users.get
Вот код с которым пробовал:
vk_api.users.get(user_id=1)
или
vk_api.users.get.fields[‘first_name’]
В чем моя ошибка? Бот сообщество.
- Вопрос задан более трёх лет назад
- 4565 просмотров
Комментировать
Решения вопроса 1
Евгений Лавров @lavrov2002
python программист
Вот как я делаю
import vk_api vk_session = vk_api.VkApi('логин', 'пароль') vk_session.auth() vk = vk_session.get_api() id = "1" user_get=vk.users.get(user_ids = (id)) user_get=user_get[0] first_name=user_get['first_name'] last_name=user_get['last_name'] full_name=first_name+" "+last_name print (full_name)
Ответ написан более трёх лет назад
Нравится 4 1 комментарий
WazzzUp1002 @WazzzUp1002 Автор вопроса
Выводит: «Павел Дуров» 🙂
Вот код:
if ('круто' == message) or ('cool' == message): send_message(peer_id, 'О да, это точно круто! B-)') vk = vkBotSession.get_api() user_get=vk.users.get(user_ids = (id)) user_get=user_get[0] first_name=user_get['first_name'] last_name=user_get['last_name'] full_name=first_name+" "+last_name print (full_name)
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +1 ещё
Как сделать форму с добавлением нескольких элементов на django?
- 1 подписчик
- 2 часа назад
- 19 просмотров
