Vk api get user id python

Как получить id пользователя с помощью vk_api & longpoll в беседе вк, на Python?

Вообщем, нужна функция которая сможет получить id пользователя в беседе(желательно по сообщению).
Создаю бота на вк и вот сложность в том, что сейчас он принимает только т.е если кто-то напишет боту «профиль» , то высветиться мой профиль. т.к from_id постоянно имеет значение с конкретно моим id. Вот как достать этот id, думаю над этим уже второй день. и в документацию лез, и вопросы искал похожие. Думаю вы поняли мою мысль.

У меня получалось нечто подобное:

def get_id(user_id): if reseived_message == "id": vk.users.get('message.send', ) print(user_id)

reseived_message — переменная с сообщением пользователя:
вот часть кода где находилась фукция:

for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') !="": reseived_message = event.message.get('text'.lower()) sender = event.chat_id if 'ку' in str(reseived_message) or 'привет' in str(reseived_message): write_message(sender, "Добрый день" + " " + take_name(from_id=573881719) + "!")

Простой 2 комментария

phaggi

def get_id(user_id): if reseived_message == "id": vk.users.get('message.send', ) print(user_id)

О боже, что я только что увидел, господа, запомните раз и навсегда: VkLongPoll- ТОЛЬКО для работы в ЛС, BotsLongPoll — в беседе. Еще, если вы хотите сделать профиль для каждого пользователя, то вам нужна база данных, (смотря что хотите написать в профиль)
Пример реализации того чего вы хотите на BotsLongPoll:

import time get_name(from_id): # Имя Фамилия пользователя if from_id > 0: sender_info = getting_api.users.get(user_ids=from_id)[0] full_name = sender_info.get('first_name') + ' ' + sender_info['last_name'] return full_name pass def profilesender(id, text) vk.method('messages.send', ) def chatsender(id, text): vk.method('messages.send', ) for event in longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: if event.from_chat: user_id = event.object.message['from_id'] mes = event.object.message['text'] if mes == 'профиль': vremya = '⏰Текущее время беседы:⏰\n' + str(time.asctime()) + '\n' chat = event.chat_id + '\n' #можете указать ид вашего чата user_name = get_name(from_id) chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id) profilesender(id, 'Имя:' + user_name + '\n' + vremya + chat +)

P.S я незнаю что вы хотите добавить в профиль пользователя, но это был пример, вообще, для этого нужно создать класс, но если вы хотите узнать айди пользователя, не нужно создавать функцию, достаточно написать:
event.object.message[‘from_id’]

sender_info = getting_api.users.get(user_ids=from_id)[0]
chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id)
def chatsender(id, text): vk.method('messages.send', )

??
3) и почему мы не могли использовать одну функцию? просто вызвал ее с разными параметрами:
chatsender(id, ‘Вот ваш профиль\n’ + ‘@id’ + user_id)
chatsender(Код с именем и временем)

. Господин, вам бы уроки по пайтону посмотреть, зачем вы лезете делать бота если вы не знаете что одна функция выполняет одну роль.
1.Если бы вы посмотрели уроки, вы бы поняли что ноль в «массиве» это срез чтобы что-то достать из списка.
2.Функция отправляет что-то в чат, первый ее аргумент: id — айди чата где произошло событие, второй — text, это любое ваше сообщение.
3.Запомните раз и навсегда, чтобы объединить две функции, можно создать одну функцию к примеру:

def rpsender(id, text, url): # Функция РП команд vk.method("messages.send", ) vk.method("messages.send", ) pass

Функция выше отправляет сообщение, а потом фото.
В функцию можно передать только аргументы которые есть в методе вк. Аргумент — переменная. Например, функция chatsender(id, text) принимает id и text. id — это переменная равная event.chat_id. Text- это текст вашего сообщения. В функции лежит метод «messages.send». Данный метод принимает значения chat_id и message. В значение chat_id мы передаем переменную id, в message text. В значение text можете передать что угодно, и время. Можно конечно в одну функцию все передать, вы можете это сделать, просто я немного торопился и создал отдельную (в этом ничего плохого нет) только для удобства создайте файл с расширением .py и создайте там лист. В лист передайте текст функции. Вот так:

#Support.py sup = ('текст функции без переменных!') #Итог chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id + '\n' 'Имя:\n' + user_name + vremya + chat + '\n')

Источник

Читайте также:  Python make class subscriptable

Usage

Several types of APIs are implemented in this module. Each of them is needed for certain purposes, but they are all united by the way of accessing the VK API. After initializing the class, you can call any method. Let’s try to figure out what’s going on here:

>>> import vk >>> api = vk.API(access_token='. ', v='5.131') >>> print(api.users.get(user_ids=1)) [] 

It gets user info with user id equal to 1. vk.api.APINamespace object is used to create API request and send it via original vk.session.API class object (or another), which in turn, manages access token, sends API request, gets JSON response, parses and returns it.

vk.API

The simplest VK API implementation. Can process any API method that can be called from the server

  • access_token (Optional[str]) – Access token for API requests obtained by any means (see documentation ). Optional when using InteractiveMixin
  • **kwargs (any) – Additional parameters, which will be passed to each request. The most useful is v — API version and lang — language of responses (see documentation )
>>> import vk >>> api = vk.API(access_token='. ', v='5.131') >>> print(api.users.get(user_ids=1)) [] 

vk.UserAPI

Subclass of vk.session.API . It differs only in that it can get access token using user credentials (Implicit flow authorization).

This implementation uses the web version of VK to log in and receive cookies, and then obtains an access token through Implicit flow authorization. In the future, VK may change the approach to authorization (for example, replace it with VK ID) and maintaining operability will become quite a difficult task, and most likely it will be deprecated. Use vk.session.DirectUserAPI instead

  • user_login (Optional[str]) – User login, optional when using InteractiveMixin
  • user_password (Optional[str]) – User password, optional when using InteractiveMixin
  • client_id (Optional[int]) – ID of the application to authorize with, defaults to “VK Admin” app ID
  • scope (Optional[Union[str,int]]) – Access rights you need. Can be passed comma-separated list of scopes, or bitmask sum all of them (see official documentation). Defaults to ‘offline’
  • **kwargs (any) – Additional parameters, which will be passed to each request. The most useful is v — API version and lang — language of responses (see documentation )
>>> import vk >>> api = vk.UserAPI( . user_login='. ', . user_password='. ', . scope='offline,wall', . v='5.131' . ) >>> print(api.users.get(user_ids=1)) [] 

Callback to retrieve authentication check code (if account supports 2FA). Default behavior is to raise exception, redefine in a subclass

Читайте также:  Html изменить шрифт всей таблицы

The authentication check code can be obtained in the sent SMS, using Google Authenticator (or another authenticator), or it can be one of ten backup codes

vk.DirectUserAPI

Subclass of vk.session.UserAPI . Can get access token using user credentials (through Direct authorization).

Necessary data (client_id and client_secret) from other official applications

  • user_login (Optional[str]) – User login, optional when using InteractiveMixin
  • user_password (Optional[str]) – User password, optional when using InteractiveMixin
  • client_id (Optional[int]) – ID of the official application, defaults to “VK for Android” app ID
  • client_secret (Optional[str]) – Client secret of the official application, defaults to client secret of “VK for Android” app
  • scope (Optional[Union[str,int]]) – Access rights you need. Can be passed comma-separated list of scopes, or bitmask sum all of them (see official documentation). Defaults to ‘offline’
  • **kwargs (any) – Additional parameters, which will be passed to each request. The most useful is v — API version and lang — language of responses (see documentation )
>>> import vk >>> api = vk.DirectUserAPI( . user_login='. ', . user_password='. ', . scope='offline,wall', . v='5.131' . ) >>> print(api.users.get(user_ids=1)) [] 

vk.CommunityAPI

Subclass of vk.session.UserAPI . Can get community access token using user credentials (Implicit flow authorization for communities). To select a community on behalf of which to make request to the API method, you can pass the group_id param (defaults to the first community from the passed list)

This implementation uses the web version of VK to log in and receive cookies, and then obtains an access tokens through Implicit flow authorization for communities. In the future, VK may change the approach to authorization (for example, replace it with VK ID) and maintaining operability will become quite a difficult task, and most likely it will be deprecated.

Читайте также:  Иерархия геометрических фигур python

You can create a group token on the management page: Community -> Management -> Working with API -> Access Tokens -> Create a token (bonus — the token has no expiration date)

  • user_login (Optional[str]) – User login, optional when using InteractiveMixin
  • user_password (Optional[str]) – User password, optional when using InteractiveMixin
  • group_ids (List[int]) – List of community IDs to be authorized
  • client_id (Optional[int]) – ID of the application to authorize with, defaults to “VK Admin” app ID
  • scope (Optional[Union[str,int]]) – Access rights you need. Can be passed comma-separated list of scopes, or bitmask sum all of them (see official documentation). Defaults to None . Be careful, only manage, messages, photos, docs, wall and stories are available for communities
  • **kwargs (any) – Additional parameters, which will be passed to each request. The most useful is v — API version and lang — language of responses (see documentation )
>>> import vk >>> api = vk.CommunityAPI( . user_login='. ', . user_password='. ', . group_ids=[123456, 654321], . scope='messages', . v='5.131' . ) >>> print(api.users.get(user_ids=1)) [] >>> print(api.users.get(group_id=654321, user_ids=1)) [] 

© Copyright 2015, Dmitry Voronin. Revision c3cfe06e .

Источник

Как сделать бота VK, который получает цифровой ID из ссылки и отправляет пользователю?

Не подскажете ли вы, как создать бота, а именно команду, которая будет принимать ссылки типа: vk.com/ и https://vk.com
А далее обрабатывать их и выдавать цифровой ID пользователя ВКонтакте, сам пытался что-то сделать, но в итоге потерял просто 6 часов
Пример:

Пользователь вводит команду: ID vk.com/durov

Ответ бота: ID пользователя: 1

P.S Бот должен отвечать в беседах

deepblack

5ce61aa65c5d4689497433.png

  1. скармливаешь ему screen_name
  2. получаешь ID пользователя и дополнительный поля (если надо)

total4c

deepblack

total4c, раз ты знаешь, почему не указал это в вопросе?
Выкладывай код, как пробовал. Иначе это уже задание

total4c

https://api.vk.com/method/(метод)?(Аргументы идущие через & )&access_token=(Ваш токен)&v=5.92

В этом случае можно вызвать метод с ключом доступа сообщества или через сервисный ключ доступа.
(Ключ доступа пользователя уже сами гуглите)

1. Используешь, к примеру, библиотеку vk_api (Установка pip install vk_api).
2. Импортируешь в программе: import vk_api
3. Начинаем работать с API вконтакте:

login, password = 'ВАШ_ЛОГИН', 'ВАШ_ПАРОЛЬ' vk_session = vk_api.VkApi(login, password) try: vk_session.auth() except vk_api.AuthError as error_msg: print(error_msg) return vk = vk_session.get_api()

4. Отправляем запрос и выдираем из него ID (вставляй его на место этой строки id1 = vk.method(«users.get»)[«id»]):
id_user = vk.users.get(user_ids = id1)[0][‘id’]

Надеюсь не сильно сумбурно )))

1. Из ссылки оставляем только короткое имя или id страницы
2. Передаём то, что получили в метод utils.resolveScreenName, или users.get
3. .

import vk_api vk = vk_api.VkApi(token="ТОКЕН") def resolve_url(url): # url - 'vk.com/durov' screen_name = url.split('/')[-1] # screen_name - 'durov' id_ = vk.method('users.get', )[0]['id'] # id_ - 1 return id_

tkovacs

import vk_api vk_session = vk_api.VkApi('номер', 'пароль') vk_session.auth() vk = vk_session.get_api() ids = vk.utils.resolveScreenName(screen_name='durov') print(ids['object_id'])

Источник

Оцените статью