К сожалению, на данный момент нет хороших библиотек на Python2, для того, чтобы быстро создать чат-бота. Ниже я покажу, как легко можно написать примитивного чат бота для VK, используя API VK.
Статья написана для новичков, чтобы показать, что ничего сложного в написании ботов на Python нет.
Авторизация
Нам понадобится библиотека vk_api. Авторизоваться в вк можно двумя способами:
— Как пользователь
— Как сообщество
В первом случае надо будет ввести логин и пароль. Во втором случае в группе надо включить "Сообщения сообщества" и создать ключ доступа к API:
Авторизация в две строчки:
import time import vk_api vk = vk_api.VkApi(login = 'login', password = 'password') #vk_api.VkApi(token = 'a02d...e83fd') #Авторизоваться как сообщество vk.auth()
Отправка сообщений
Теперь напишем короткую функцию, которая отправляет сообщение выбранному человеку.
P.S. Сообщество может отправлять сообщения только ранее писавшим пользователям.
def write_msg(user_id, s): vk.method('messages.send', {'user_id':user_id,'message':s})
В vk.method мы можем вызывать любой метод из VK API и передавать параметры в виде словаря.
В данном случае мы вызываем метод messages.send и в качестве параметров передаем id пользователя и текст сообщения.
Прием сообщений
Отлично! Отправлять сообщения мы научились, осталось научиться их принимать. Для этого нам нужен метод messages.get.
Несколько параметров, на которые стоит обратить внимание:
1) out — если этот параметр равен 1, сервер вернет исходящие сообщения.
2) count — количество сообщений, которое необходимо получить.
3) time_offset — максимальное время, прошедшее с момента отправки сообщения до текущего момента в секундах.
4) last_message_id — идентификатор сообщения, полученного перед тем, которое нужно вернуть последним (при условии, что после него было получено не более count сообщений)
values = {'out': 0,'count': 100,'time_offset': 60} vk.method('messages.get', values)
В нашем случае этот метод вернет все полученные сообщения за последние 60 сек, если их конечно было меньше 100, а если больше, то последние 100.
В итоге мы получаем список items:
{u'count': 3441, u'items': [{u'body': u'\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043a!', u'date': 1491934484, u'id': 7387, u'out': 0, u'read_state': 0, u'title': u' ... ', u'user_id': 23107592}, {u'body': u'\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!', u'date': 1491934479, u'id': 7386, u'out': 0, u'read_state': 0, u'title': u' ... ', u'user_id': 23107592}]}
Если объяснять простыми словами, то items — это то, что можно выделить в диалоге.
Финальный аккорд, делаем вечный цикл, где на каждое сообщение будем отвечать "Привет, Хабр!".
while True: response = vk.method('messages.get', values) if response['items']: values['last_message_id'] = response['items'][0]['id'] for item in response['items']: write_msg(item[u'user_id'],u'Привет, Хабр!') time.sleep(1)
Чат-бот готов.
P.S. Мы запоминаем параметр last_message_id, чтобы в следующий раз обрабатывать только новые сообщения.
import time import vk_api vk = vk_api.VkApi(login = 'login', password = 'password') #vk_api.VkApi(token = 'a02d...e83fd') #Авторизоваться как сообщество vk.auth() values = {'out': 0,'count': 100,'time_offset': 60} def write_msg(user_id, s): vk.method('messages.send', {'user_id':user_id,'message':s}) while True: response = vk.method('messages.get', values) if response['items']: values['last_message_id'] = response['items'][0]['id'] for item in response['items']: write_msg(item[u'user_id'],u'Привет, Хабр!') time.sleep(1)
Получилось 17 строк кода. Успехов!
ссылка на оригинал статьи https://habrahabr.ru/post/326312/
Добавить комментарий