как написать скрипт на питоне для вк
Бот VK на Python 2020 года с ответами в беседу
Всем доброго времени суток!
Я очень долго прочесывал интернет в поисках рабочего варианта бота для ВК, разработанного на Python. Никак не мог найти ни одной нормальной, целой статьи — в одной устаревший метод, в другой непонятные ошибки и так далее…
Друзья, я решил поделиться с вами всеми теми знаниями которые приобрел и сейчас мы с вами шаг за шагом напишем хорошего рабочего бота ВК для текущего, 2020, года. Впрочем надеюсь статья не потеряет актуальности и позже.
С чего начать?
Начнем с установки необходимых библиотек. Естественно открываем cmd.exe ( в некоторых случаях может понадобиться запустить от имени администратора) и прописываем туда следующее:
pip install vk
pip install vk_api
Мы установили две библиотеки для работы нашего Python-а с сервисом VK.
Теперь запускаем IDLE и начинаем писать код.
Объясняю: импортируем установленные ранее библиотеки и модули для работы с ними.
Авторизация
Авторизовались как группа. Важно создать такой токен, который будет разрешать отправку, прием, обработку сообщений и, в принципе, все что нам захочется.
Импортируем модуль longpool для работы с чатами.
Нюансы
Дело в том, что в одной программе нельзя одновременно запустить бота для ответов на ЛС и для работы в беседе, поскольку для этого используются два разных модуля longpool и как только запускается прослушивание longpool-ом на канале «ЛС»(Личные Сообщения) прослушивание другого канала, т.е. чата недоступно, пока не завершится первый процесс прослушивания. Проще говоря задачи могут выполняться исключительно последовательно, а не параллельно. Поэтому в целом коде я деактивирую часть с ЛС, заключив ее в »’ кавычки.
Теперь импортируем то же самое, но для ЛС.
Кнопки
Теперь объявим пару функций для кнопок, которые наш бот в будущем будет выдавать по требованию. К ним мы обратимся вскоре ещё раз.
Прием-отправка сообщений из беседы
А теперь будем слушать longpool на предмет новых сообщений. event — переменная в которой будет храниться само сообщение и некоторые данные о нем.
Перевод того, что выше: Если слово «Привет» или «. » или «. » содержится в переменной event, тогда:
Проверяем куда направлен наш event. Если в чат тогда вызываем метод отправки сообщений «vk.messages.send».
Внимание
… переменные key, server и ts необходимо заполнить. Эти переменные нужны для установки связи с сервером VK. Чтобы узнать эти переменные, а они у всех свои, нужно авторизованным перейти на сайт VK разработчикам и во вкладке «Пример запроса» ввести ID своей группы.
random_id — это случайный id сообщения, который в новых версиях VK_API теперь обязателен.
chat_id — это идентификатор беседы, из которой пришел event или иначе говоря сообщение.
if ‘Клавиатура’ in str(event):
Теперь, если пользователь напишет «Клавиатура«, то наш бот щедро предоставит кнопки, о которых мы говорили ранее.
Часть с Личными Сообщениями
Теперь отпишем вторую часть для ЛС без особых подробностей.
Поздравляю! Мы с вами разобрали бота на Python 2020 года. А сейчас я приведу весь код целиком.
Бот для VK на Python с MySQL за час ч.1
В интернете есть много туториалов как написать бота для Вконтакте, но все они имеют существенные недостатки для новичков. Они дают совсем минимальную базу из-за которой в будущем новичкам будет трудно понять как работают те или иные вещи.
В этом туториале я хочу показать как сделать максимально простого бота с довольно большим базовым функционалом.
Что нам понадобится?
Подключение
Для начала подключим все библиотеки:
Теперь можно приступить к настройке бота и базы данных.
Именно в моем случае все данные находятся в файле config.py. Вы же можете прописать их где угодно. На функционал то никак не повлияет.
Подключение базы данных
Для этого создадим функцию при помощи модуля PyMySQL:
Эта функция будет возвращать данные для дальнейшей работы с базой данных. Соответственно подставляем свои данные где видим «you_».
Настройка подключения к боту
Для начала нам нужно перейти в настройки своей группы:
Выбрать вкладку Работа с API и создать ключ доступа(в будущем он нам пригодится для подключения к боту.
Перейти во вкладку «Long Poll API» и включить его. А так же выбрать последнюю из доступных версий
Перейти в «Типы событий» и так же включить все, что вам понадобится. Я включил например все
И последнее. Перейти в «Сообщения» > «Настройки для бота» и включить возможность ботов. Теперь можно перейти к самой программе.
Подключение бота к группе
Теперь пропишем подключение бота к long poll и проверку действий со стороны Вконтакте:
Теперь мы включили самого бота, который будет принимать входящие сообщения и анализировать их для дальнейшей работы.
Работа с ботом
Давайте добавим боту функцию отвечать на любые наши сообщения нашими же сообщениями. Для этого после последней строчки пропишем это:
Теперь про метод vk.messages.send().Это стандартный метод модуля vk_api. О методах можно будет прочитать на официальной документации Вконтакте(ссылка будет ниже).
Он позволяет отправлять сообщения пользователям.
Аргумент user_id указывает какому аккаунту это сообщение это надо отправить. В нашем случае event.obj.from_id указывает на аккаунт, который только что нам отправил сообщение. То есть мы отправляем сообщение тому человеку, который отправил его нам.
Указывать этот аргумент обязательно!
Аргумент random_id нужен для того, чтобы Вконтакте не отправлял сообщения по 2 раза. Указывать этот аргумент обязательно!
Аргумент message собственно указывает какое сообщение мы должны отправить. В event.obj.text хранится информация о том, какой текст в сообщении мы получили. Этот аргумент тоже обязателен.
Больше об аргументах к этому методу можно прочитать на официальной странице Вконтакте.
Запуск
Теперь наш бот готов и мы можем его запустить. После запуска можно смело писать боту и увидеть результат.
На этом 1 часть закончена. Мы научились включать бота. Настраивать его, а так же отправлять сообщения.
Во 2 части мы разберем, как при помощи библиотеки PyMySQL заносить сообщения в базу данных и так далее.
Создание бота для ВКонтакте на языке програмирования Python
Создание бота для ВКонтакте на языке программирования Python
Для начала нам надо установить нужные библиотеки, а точнее vk_api.
В начале разберемся как получить токен для нашего бота.
Начинаем писать код
Импортируем что нужно:
Далее пишем строки, которые просто обязательно нужны, для того что бы работать с сообществом (авторизируем бота):
Далее пишем цикл, в котором будут обрабатываться сообщения:
Между циклом и авторизацием (назовём это место аиц) будет код позволяющий отправлять сообщения.
Для того что бы отправить сообщение надо в аиц добавить код:
Теперь в цикл мы можем добавить обработку сообщений:
Учимся отправлять стикеры и фотографии
Для того что бы отправлять стикеры в аиц добавляем:
Теперь надо получить id стикера для этого надо:
Что бы отправить фотографию надо в первых что бы фотография была либо у вас на устройстве либо во Вконтакте (я расскажу только о втором).
Для того что бы найти айди фото надо открыть фотографию и в ссылке скопировать текст начиная со слова photo включительно и до % не включительно, например:photo-190960458_457239182
Далее в аиц добавляем:
а в цикл добавляем:
Создание клавиатуры
Для начала импортируем
Потом идет описание самой клавиатуры
Далее добавляем в функцию которую будем вызывать keyboard=keyboard.get_keyboard()
Теперь при вызове данной функции будет появляться клавиатура
Пишем чат бота для ВКонтакте на python с помощью longpoll
Сейчас боты стали обыденностью и находятся на каждом шагу, но если тебе нужен свой бот в социальной сети вконтакте, то это легко реализовать.
Ну прям совсем для новичков
Как оно работает?
Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое-либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.
Говоря русским языком, мы отправляем на сервер запрос, а он в свою очередь тыкает вконтакте если там произойдёт что либо, например, нам придёт сообщение он бежит и говорит об этом нам. От этого и будем плясать.
Техническая реализация
Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.
Замечание, ребята из ВК рекомендуют использовать в качестве логина номер телефона т.к. иначе можно нарваться на проверку антиробот, ту самую где тебя просят ввести недостающие цифры из номера телефона.
Если бот будет сидеть в группе то авторизация выглядит по другому.
— Что такое токен?
— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».
Теперь вызовем longpool.
В сообщениях может быть не только заданный вами текст. Например:
А ещё можно прикреплять картинки.
Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:
и никто не запретил нам получать ответ от пользователя на примере Википедии:
Ссылки на примеры и документацию
На этом я с вами попрощаюсь. Хорошего кодинга.
Как создать чат-бота для ВКонтакте, используя Python, Django и webhook
Зачем ещё одна статья про создание чат-бота?
Зачем платный хостинг?
На мой взгляд жизнеспособный вариант бота — это когда он не зависит от вашего локального компьютера и доступен 24/7. Для этого нужен хостинг, на котором есть: веб-сервер, система управления базами данных (для развития возможностей бота), регистрация доменного имени, получение для него SSL-сертификата и техническая поддержка всего этого хозяйства. Такие услуги стоят денег. Я плачу хостингу 138 рублей в месяц за поддержание инфраструктуры для работоспособности бота: поддержка Python + Django, СУБД MySQL 25 Гб, поддержка SSH.
В большинстве уроков я видел что используется персональный компьютер в качестве сервера или бесплатный хостинг с ограничениями по времени работы и т. п. В примерах бот с периодичностью опрашивает сервер мессенджера на предмет появления новых сообщений от пользователей. Это лишняя нагрузка на серверы мессенджера, поэтому бот могут «забанить» на какое-то время. Всё это по моему мнению не жизненно для продуктивного использования. Но для теста и обучения вполне возможно.
Что такое webhook и зачем он?
Для продуктива правильным решением считаю использование webhook’а, т. е. подхода, при котором наш бот ожидает сообщений от сервера мессенжера, а не «долбит» его периодическим запросами: есть новые сообщения или нет. С webhook’ом будет так: написал пользователь сообщение, сервер мессенджера отправил его вашему боту, он сообщение принял, обработал и ответил.
Почему Django?
Я решил делать бота на python, поэтому подключил на хостинге поддержку python. Но выбора фреймворка у меня не было — хостинг располагает только Django. Говорят на нём работает Instagram, Pinterest, Bitbucket и Mozilla. Возможно именно поэтому хостинг предлагает именно его.
Почему ВКонтакте, а не Telegram или Viber?
Чтобы двигаться от простого к сложному для меня было важно найти самый простой и понятный способ настроить webhook. ВКонтакте оказался для меня наиболее понятным ввиду чёткой справке и простоты подключения webhook’a в панели управления сообществом в разделе «Управление — Работа с API». Описание того как я всё настраивал и подключал будет дальше. В перспективе хочу сделать доступным своего бота в Viber. А с Telegram пока не по пути, т. к. мой хостинг в России, а из России Telegram заблокирован. Чтобы не было проблем с Telegram можно купить хостинг заграницей.
Как установить webhook для бота ВКонтакте?
Доменное имя https://. Для начала нужно зарегистрировать доменное имя сайта и получить для него ssl-сертификат.
Я не хотел использовать для чат-бота корневой домен, поэтому после регистрации домена, я сделал поддомен и получил для него ssl-сертификат.
Все эти манипуляции я сделал на сайте хостинга в своём личном кабинете.
В итоге я получил адрес сайта mybot.mysite.ru и ssl-сертификат к нему.
Получаем для бота ключ доступа (токен) ВКонтакте. Сперва создал закрытую группу, далее зашёл в «управление» группой, в раздел «Работа с API». Во вкладке «Ключи доступа» находится токен, а во вкладке «Callback API» настройки webhook’a.
Установка и настройка Django. Возможно для запуска вашего скрипта на python Django не нужен, но я не знаю как можно по другому.
Используя PuTTY я подключился к серверу по SSH, настроил и активировал виртуальное окружение.
команда в первой строке создаёт виртуальное окружение, а команда во второй — его активирует (обратите внимание на пробел после точки). Версия 2.7 продиктована хостингом и может отличаться в вашем случае. Поэтому читайте справку хостинга.
Далее установил Django
SSH:
установил Джанго версии не ранее второй, т. к. на хостинге используется python 2.7, а с ним работает только Django версии меньше 2.
И установил python-модуль для работы с API ВКонтакте
SSH:
FTP:
Создал папку для django-проектов в корневой директории на хостинге. Назвал её django.
SSH:
Создал новый проект.
в результате создастся папка с именем проекта (в нашем случае — это «mybot») в папке /django. В ней будут файлы начального проекта, созданные автоматически:
/django
/mybot – папка проекта
/mybot – модуль с настройками нашего проекта
__init__.py
settings.py
urls.py
wsgi.py
manage.py
Проект в Django – это группа приложений. Приложение в Django – это программа, которая выполняет действия, заложенные разработчиком.
SSH:
Создал приложение.
Я перешёл в папку /django/mybot и создал новое приложение с именем «vk_bot».
В папке проекта создалась папка с именем приложения, содержащая файлы приложения, созданные автоматически:
/django
/mybot – папка проекта
/mybot – модуль с настройками нашего проекта
__init__.py
settings.py
urls.py
wsgi.py
manage.py
/vk_bot – папка приложения
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
FTP:
Я загрузил все файлы проекта на свой ноутбук для работы с кодом.
Для работы с файлами проекта и программирования я использовал приложение Atom.
Atom:
Отредактировал настройки проекта в файле /django/mybot/mybot/settings.py
Atom:
Отредактировал настройки url-маршрутизации адресов в файле /django/mybot/mybot/urls.py
FTP:
Создал файл /django/mybot/vk_bot/urls.py такого содержания:
Atom:
Отредактировал файл /django/mybot/vk_bot/views.py – добавил в него функцию под названием index, которая будет выполняться при запросе в браузере адреса
В скрипте views.py, в функции index(request) пришлось отключить встроенную в Django CSRF защиту, т.к. я получал ошибку «403 Forbidden». CSRF — Cross Site Request Forgery protection — защита от подделки межсайтовых запросов. Как работает CSRF можете почитать в этой статье.
Для отключения защиты я использовал декоратор @csrf_exempt. Но чтобы все таки эту защиту обеспечить, но более простым способом я использовал секретный ключ, который прописывается в разделе управления группой на сайте ВКонтакте.
Вот это кусок кода отвечает за то, чтобы обрабатывать запросы с сервера, которые он будет посылать для того, чтобы подключить наш webhook для обработки событий. Скажем так, «подтверждение» нашего webhook’a.
Обратите внимание, что все конфигурационные настройки я держу в отдельном файле конфигурации бота bot_config.py и поэтому подключаю его в начале скрипта:
А в этот кусок кода обрабатывает сообщения пользователей:
Если что-то показалось непонятным, можно дополнительно прочитать статью о первой настройке Django.
Магия для веб-сервера. Для настройки адресации запросов к веб-серверу зашёл на сервер в папку с доменами через FTP-клиент FileZilla и создал там папку «mybot.mysite.ru«, в неё положил три файла, содержимое которых взято из справки на хостинге:
Здесь «myEnv» — название созданного вами виртуального окружения, «django» — папка в корневом разделе файловой системы на хостинге, «mybot» — название проекта, который мы создали с помощью Django.
«Привязываем» наш webhook к обработке сообщений в созданной группе Вконтакте.
Для этого вернёмся в раздел управления нашей группой на сайте ВКонтакте (см. скриншот выше). Введём в поле «Адрес» наш адрес webhook’a и нажмём кнопку «Подтвердить». Если наша функция index(request), написанная в файле /django/mybot/vk_bot/views.py работает корректно, т. е. в ней нет опечаток и ошибок, то появится зелёная галочка, символизирующая что всё хорошо.
Чтобы наш webhook получал от сервера ВКонтакте сообщения о новых сообщениях пользователей, в разделе управления нашей группой на сайте ВКонтакте, во вкладке «Типы событий» поставим галочку напротив «входящие сообщения».
В итоге наш скрипт будет получать вот такие сообщения в json формате:
Обратите внимание на то, что в json сообщении есть поле «secret». Это тот самый секретный ключ, который я прописал в разделе управления группой на сайте ВКонтакте, взамен встроенной в Django CSRF защиты, которую мне пришлось отключить.
Как сделать бота умнее и лучше?
Можно создать базу данных с ответами пользователю и научить бота выбирать ответ наиболее близкий по смыслу к вопросу пользователя. Об этом расскажу в отдельной статье.
Можно и нужно запрограммировать сценарии взаимодействия с пользователем, так сказать чтобы поддержать разговор.