Скрипт vk api python

Пишем чат бота для ВКонтакте на python с помощью longpoll

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

Ну прям совсем для новичков

Как оно работает?

Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое-либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.

Говоря русским языком, мы отправляем на сервер запрос, а он в свою очередь тыкает вконтакте если там произойдёт что либо, например, нам придёт сообщение он бежит и говорит об этом нам. От этого и будем плясать.

Техническая реализация

Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.

import vk_api import requests session = requests.Session() login, password = 'Ваш логин, email или телефон', 'Ваш пароль' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return

Замечание, ребята из ВК рекомендуют использовать в качестве логина номер телефона т.к. иначе можно нарваться на проверку антиробот, ту самую где тебя просят ввести недостающие цифры из номера телефона.

Если бот будет сидеть в группе то авторизация выглядит по другому.

import requests import vk_api vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')

— Что такое токен?
— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».

from vk_api.longpoll import VkLongPoll, VkEventType longpoll = VkLongPoll(vk_session) vk = vk_session.get_api() for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Слушаем longpoll, если пришло сообщение то: if event.text == 'Первый вариант фразы' or event.text == 'Второй вариант фразы': #Если написали заданную фразу if event.from_user: #Если написали в ЛС vk.messages.send( #Отправляем сообщение user_id=event.user_id, message='Ваш текст' ) elif event.from_chat: #Если написали в Беседе vk.messages.send( #Отправляем собщение chat_id=event.chat_id, message='Ваш текст' ) 

В сообщениях может быть не только заданный вами текст. Например:

import datetime vk.messages.send( user_id=event.user_id, message='Московское время: ' + str(now.strftime("%H:%M")) )

А ещё можно прикреплять картинки.

attachments = [] from vk_api import VkUpload upload = VkUpload(vk_session) image_url = 'Ссылка на картинку' image = session.get(image_url, stream=True) photo = upload.photo_messages(photos=image.raw)[0] attachments.append( 'photo<>_<>'.format(photo['owner_id'], photo['id']) ) vk.messages.send( user_id=event.user_id, attachment=','.join(attachments), message='Ваш текст' )

Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:

image_url = 'http://сайт.com/uploads/' + event.text + '.png'

и никто не запретил нам получать ответ от пользователя на примере Википедии:

import wikipedia #Модуль Википедии wikipedia.set_lang("RU") if event.text == 'Википедия' or event.text == 'Вики' or event.text == 'википедия' or event.text == 'вики' or event.text == 'Wikipedia' or event.text == 'wikipedia' or event.text == 'Wiki' or event.text == 'wiki': #если нам пришло сообщение с текстом Википедия или Вики или . или wiki if event.from_user: #Если написали в KC vk.messages.send( user_id=event.user_id, message='Введите запрос' #Пишем "Введите запрос" ) elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message='Введите запрос' #Пишем "Введите запрос" ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Пинаем longpoll if event.from_user: vk.messages.send( #Если написали в ЛС user_id=event.user_id, message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла continue

Ссылки на примеры и документацию

На этом я с вами попрощаюсь. Хорошего кодинга.

Читайте также:  Php include file name

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper

License

python273/vk_api

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

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?

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

- Support captcha on twofactor path - Fix sid verification - Fix OAuth response parsing

Git stats

Files

Failed to load latest commit information.

README.md

vk_api – Python модуль для создания скриптов для ВКонтакте (vk.com API wrapper)

python3 -m pip install vk_api 
import vk_api vk_session = vk_api.VkApi('+71234567890', 'mypassword') vk_session.auth() vk = vk_session.get_api() print(vk.wall.post(message='Hello world!'))

About

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper

Читайте также:  Java static class inheritance

Источник

Библиотека vk для работы с VK API на Python

image

Привет, Хабр! Данная статья предназначена для тех, кто хочет разобраться с основами VK API на Python, так как статей по этому поводу нет (на Хабре есть одна статья, но она уже не совсем актуальна, так как некоторые методы не работают), а на других ресурсах мне удалось найти только вопросы пользователей, но никаких гайдов и прочего.

Для работы с VK API в Python есть две популярные библиотеки: vk и vk_api. Какая из библиотек лучше я судить не возьмусь, но скажу одно: у vk документация слишком мала (поэтому разбирался практически методом тыка) и на английском языке, а у vk_api документация более развернута (поэтому писать о данной библиотеке смысла не вижу) и на русском. Для меня не главное на каком языке документация, но для некоторых пользователей это играет большое значение при выборе.

Как вы уже поняли, в данной статье рассматривается работа с библиотекой vk.

Устанавливается данная библиотека следующей стандартной командой:

После того, как модуль будет установлен, нам необходимо создать приложение на сайте соц.сети. Я думаю, что большинство пользователей умеет это делать, поэтому информацию по этому шагу пропускаю. Если кто не умеет, то гуглим, не стесняемся.

После регистрации приложения нам нужен будет только его ID.

Начнем с авторизации. В принципе, некоторую информацию можно получить и без ввода личных данных, что конечно же хорошо, например:

import vk session = vk.Session() vk_api = vk.API(session) vk_api.users.get(user_id=1) 

Таким образом мы получим фамилию, имя и id пользователя с user_id = 1. Если вам нужно получить еще какую-то информацию о пользователе, то в вызове метода нужно указать дополнительные поля, информация о которых должна быть возвращена:

vk_api.users.get(user_id=1, fields=’online, last_seen’)

Т.е. в данном случае мы получим не только информацию об имени и фамилии пользователя с но и информацию о том, находится ли пользователь сейчас на сайте (fields=’online’) и время последнего посещения, а также тип устройства (fields=’ last_seen’).

Действия без авторизации не предоставляют нам возможность использования VK API на полную мощь, поэтому рассмотрим авторизацию с вводом личных данных. Есть два способа: ввод логина и пароля, ввод токена. Чтобы авторизоваться с помощью токена нужно немного дополнить первый пример, а именно вот эту строку:

session = vk.Session(access_token='tocken')

Дальше все остается так же, как и было раньше, без каких-либо изменений.

Следующий способ авторизации – ввод логина и пароля. В данном случае тоже все довольно просто и понятно:

session = vk.AuthSession('id_app', 'login', 'pass') vk_api = vk.API(session)

Как видите, ничего сложного и все настолько просто и понятно, что даже не нуждается в дополнительных комментариях.

Читайте также:  Php вставить html тег

При такой авторизации нужно указывать не только логин, пароль и ID приложения, но то, к чему мы хотим получить доступ.

Например, у нас сейчас не указан доступ к стене пользователя, поэтому при попытке добавить запись на стену мы получим ошибку:

vk_api.wall.post(message="hello") Ошибка: vk.exceptions.VkAPIError: 15.

Для того чтобы данный код сработал корректно, при авторизации нужно указать дополнительно аргумент с названием scope и перечислить через запятую те методы, доступ к которым мы хотим получить.

session = vk.AuthSession('id_app', 'login', 'pass', scope=’wall, messages’) vk_api = vk.API(session) vk_api.wall.post(message="hello")

В данном примере я запрашиваю доступ к стене и сообщениям. Выполнение программы завершается корректно, а на стене появляется запись с текстом ‘hello’. Названия методов, к которым возможно получить доступ можно посмотреть на этой странице документации.

Вот и все. Вызов методов происходит по одному шаблону:

vk_api.метод.название(параметры=значения) Например: vk_api.messages.send(users_id=0, messages=’hello’)

Таким образом мы отправляем сообщение hello пользователю с (т.е. самому себе). Названия параметров, которые нужно передавать при вызове какого-либо метода можно найти в документации, в описании самого метода.

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

import datetime from time import sleep import vk def get_status(current_status, vk_api, id): profiles = vk_api.users.get(user_id=id, fields='online, last_seen') if (not current_status) and (profiles[0]['online']): # если появился в сети, то выводим время now = datetime.datetime.now() print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') print('Появился в сети в: ', now.strftime("%d-%m-%Y %H:%M")) return True if (current_status) and (not profiles[0]['online']): # если был онлайн, но уже вышел, то выводим время выхода print('Вышел из сети: ', datetime.datetime.fromtimestamp(profiles[0]['last_seen']['time']).strftime('%d-%m-%Y %H:%M')) print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') return False return current_status if __name__ == '__main__': пользователя: ") session = vk.Session() vk_api = vk.API(session) current_status = False while(True): current_status = get_status(current_status, vk_api, id) sleep(60)

Данная статья предназначалась лишь для понимания основ работы с VK API на Python с использованием библиотеки VK.

Источник

vk_api

История выпусков Уведомления о выпусках | Лента RSS

Загрузка файлов

Загрузите файл для вашей платформы. Если вы не уверены, какой выбрать, узнайте больше об установке пакетов.

Source Distribution

Uploaded 25 июн. 2022 г. source

Built Distribution

Uploaded 25 июн. 2022 г. py3

Хеши для vk_api-11.9.9.tar.gz

Хеши для vk_api-11.9.9.tar.gz
Алгоритм Хеш-дайджест
SHA256 c7741e40bc05980c91ed94c84542e1e7e7370e101b5eaa74222958d4130fe3c2 Копировать
MD5 da25cd23b3315480aa6eb40e246b8411 Копировать
BLAKE2b-256 fc6cb696dcc8f10136f0c1afc98e37a267e46b63301e7f48ab5fc13065f0755f Копировать

Хеши для vk_api-11.9.9-py3-none-any.whl

Хеши для vk_api-11.9.9-py3-none-any.whl
Алгоритм Хеш-дайджест
SHA256 c71021506449afe5b9bbb1c4acb0d86b35a007ddc21678478e46fbbeabd1f3ef Копировать
MD5 453fc6600135f7e8a88d4e8ee7b7f236 Копировать
BLAKE2b-256 55ff2298f424d7a7ef994e295a31911d47f23a6afdb9e880f10b2dc7a9998a8a Копировать

Помощь

О PyPI

Внесение вклада в PyPI

Использование PyPI

Разработано и поддерживается сообществом Python’а для сообщества Python’а.
Пожертвуйте сегодня!

PyPI», «Python Package Index» и логотипы блоков являются зарегистрированными товарными знаками Python Software Foundation.

Источник

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