Создание простого чат-бота в VK на Python 3 / Хабр
Создание основы для работы бота будет состоять из следующих этапов:
- Создание бота в ВК
- Генерирование API- ключа
- Создание программы бота через LongPoolVK
Для кого эта статья?
Статья рассчитана для начинающих программистов. Метод работы программы очень прост и любой, кто умеет разбираться в синтаксисе Питона и немного знающий ООП сможет его реализовать для своих нужд. Но в принципе даже не зная никаких принципов ООП, думаю можно научиться добавлять простые функции или хотя бы в крайнем случае использовать готовые исходники из GitHub.Что есть в этой статье?
Создание основы бота. После этого его можно будет запрограммировать как-угодно. Автоматизировать какую-то рутину или использовать как собеседник.Улучшенная (слегка усложненная версия бота). Я решил сначала представить простой процедурный код бота, а затем слегка усложнить его, добавив функции, значительно улучшающие работу бота.
Добавление функции передачи погоды. Научим бота говорить нам погоду.
Создание бота в ВК
Начнем мы с создания бота, а именно группу в ВК.Для это нужно зайти в «группы» → «создать сообщество».
Выберите любой тип сообщества и введите название, тематику группы.
На открывшейся странице настроек, выберите «Работа с API»
Далее, необходимо создать API-ключ.
Затем выберите нужные вам параметры с доступом для вашего API-ключа.
Скорее всего, вам придётся подтверждать действие в ВК с помощью мобильного телефона. Затем скопируйте полученный API-ключ где-нибудь в файл. Он нам еще понадобится.
Затем нужно разрешить сообщения. Для этого переходим в «сообщения» и включаем их.
Приступим к программной части бота
Мы не будем реализовывать его через запросы к ВК, а если быть точнее, просто используем библиотеку VkLongPool, которая сделает это за нас.Для этого необходима библиотека vk_api. Установим его через pip:
python -m pip install vk_apiНо лично я работаю с виртуальным окружением Anaconda. С этим зачастую возникают проблемы при первой работе. Обычно проблема в том, что система не распознают команду «python». А решается эта проблема путем добавления его в PATH.
Приступим к самому коду:
Импортируем нужные модули:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventTypeЗатем код:
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message}) # API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) # Основной цикл for event in longpoll.listen(): # Если пришло новое сообщение if event.type == VkEventType.MESSAGE_NEW: # Если оно имеет метку для меня( то есть бота) if event.to_me: # Сообщение от пользователя request = event.text # Каменная логика ответа if request == "привет": write_msg(event. user_id, "Хай") elif request == "пока": write_msg(event.user_id, "Пока((") else: write_msg(event.user_id, "Не поняла вашего ответа...")
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})Авторизовавшись как сообщество и настроив longpool:
# API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) Войдем в основной цикл: # Основной цикл for event in longpoll.listen():В нем мы циклически будем проверять на наличие event-ов. А получить тип event-а сможем с помощью event.type.
После этого получив сообщение от пользователя сможем отправить ему соответствующее письмо с помощью уже созданной функции write_msg.
Итак, мы создали очень простого бота в ВК с такой же простой реализацией. А логику бота можно программировать как душе угодно.
Листинг кода в GH
Теперь приступим к более реальному программированию
Создадим класс VkBot в файле vk_bot.py, который будет служить нам ботом.class VkBot: def __init__(self, user_id): print("Создан объект бота!") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["ПРИВЕТ", "ПОГОДА", "ВРЕМЯ", "ПОКА"]И добавим туда метод с помощью которого можно получить имя пользователя через vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]Это делается с помощью beatifulsoup4.
python -m pip install bs4На него есть достаточное количество статей, которые стоит изучить. С помощью него же создадим еще несколько методов:
# Получение времени: def _get_time(self): request = requests.get("https://my-calend.ru/date-and-time-today") b = bs4.BeautifulSoup(request.text, "html.parser") return self._clean_all_tag_from_str(str(b.select(".page")[0].findAll("h3")[1])).split()[1] # Получение погоды def _get_weather(city: str = "санкт-петербург") -> list: request = requests.get("https://sinoptik.com.ru/погода-" + city) b = bs4.BeautifulSoup(request.text, "html.parser") p3 = b.select('.temperature .p3') weather1 = p3[0].getText() p4 = b.select('.temperature .p4') weather2 = p4[0].getText() p5 = b.select('.temperature .p5') weather3 = p5[0].getText() p6 = b.select('.temperature .p6') weather4 = p6[0].getText() result = '' result = result + ('Утром :' + weather1 + ' ' + weather2) + '\n' result = result + ('Днём :' + weather3 + ' ' + weather4) + '\n' temp = b.select('.rSide .description') weather = temp[0]. getText() result = result + weather.strip() return result # Метод для очистки от ненужных тэгов @staticmethod def _clean_all_tag_from_str(string_line): """ Очистка строки stringLine от тэгов и их содержимых :param string_line: Очищаемая строка :return: очищенная строка """ result = "" not_skip = True for i in list(string_line): if not_skip: if i == "<": not_skip = False else: result += i else: if i == ">": not_skip = True return result
С помощью этих методов мы сможем получить время и погоду. Эти методы вырезаны из моего основного проекта бота. Следует организовать их в отдельных пакетах и классах, применяя наследование. Но ради примера работы, я решил вместить все это в один класс бота, что конечно плохо.
Создадим основной метод new_message, который будет обрабатывать сообщение пользователя и возвращать ответ:
def new_message(self, message): # Привет if message.upper() == self._COMMANDS[0]: return f"Привет-привет, {self._USERNAME}!" # Погода elif message.upper() == self._COMMANDS[1]: return self._get_weather() # Время elif message.upper() == self._COMMANDS[2]: return self._get_time() # Пока elif message.upper() == self._COMMANDS[3]: return f"Пока-пока, {self._USERNAME}!" else: return "Не понимаю о чем вы..."Теперь вернемся к запускаемому файлу:
Импортируем класс нашего бота:
from vk_bot import VkBotИзменим основной наш цикл:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: {event.user_id}', end='') bot = VkBot(event. user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)То есть теперь мы будем передавать полученное сообщение объекту бота, который вернет нам нужный ответ.
Это усложнение программы просто необходимо, если вы хотите дальше улучшить функционал бота:
Создайте отдельные пакеты и классы для каждой функции _get_time и _get_weather. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона.
Присылать рецепты блюд на завтрак, обед, ужин.Вы же можете редактировать бота под себя.
Бот из статьи
Основной проект бота (улучшенный) на GH
Буду рад вашим идеям. По любым вопросам пишите.
Издательская Группа «Азбука-Аттикус»: Азбука, Иностранка, КоЛибри, Махаон
Издательская Группа «Азбука-Аттикус»: Азбука, Иностранка, КоЛибри, МахаонАзбукаИностранкаКоЛибриМахаонКниги
Закладки
КаталогХудожественная литература
Литература для детей
Non-fiction
Комиксы
Наши авторыСерииНичего не найдено
Попробуйте изменить запрос
ЛИСТАЙТЕ ВНИЗ
Жауме Кабре, кабанята и проблема зла в человеке
Зачем читать новый роман каталонского классика «И нас пожирает пламя»
20.05.2023
18 художественных книг июня
01.06.2023
5 причин прочитать роман «Уроки химии»
17.05.2023
Новые нон-фикшн книги июня
01.06.2023
Новые книги для детей: июнь 2023
01.06. 2023
Любовь, Мартин, любовь
Роман Давида Фонкиноса о мальчике, который не стал Гарри Поттером
22.05.2023
«Виолета»: Сто лет любви
Новый роман Исабель Альенде
20.03.2023
Дафна Дюморье: От «Птиц» до «Ребекки»
Как жила и о чем писала создательница современного триллера
20.04.2023
Препринт: «Уроки химии»
15.05.2023
Одиссей из Картахены: жизнь и творчество Артуро Переса-Реверте
24.03.2023
Препринт: «Супервулканы»
27.02.2023
Ян Экхольм: главный шведский сказочник
22.02.2023
Препринт: «Жизнь — сапожок непарный»
17.03.2023
Пилчер: Самый нужный писатель в неспокойное время
27.01.2023
Путеводитель по книгам Рагнара Йонассона
15.02.2023
«Игра престолов» в реальном мире
Чем хорош исторический фикшн Конна Иггульдена
08.02.2023
Путеводитель по книгам Юсси Адлер-Ольсена
31.01.2023
9 экранизаций, которые мы ждем в 2023 году
30. 01.2023
Книжные подборки
Популярные подборки:Книги по делу: бизнес и саморазвитие
Книги о сильных людях в непростые времена
В нелегкие времена очень важно не падать духом и не отчаиваться. Этому нас учат литературные произведения, персонажи которых в самых непростых ситуациях всегда верили в лучшее, находили выход и преодолевали трудности. Любовь к жизни, сила человеческого духа, стойкость перед невзгодами, невероятная воля — вот что объединяет героев книг из нашей подборки. Собрали топ-6 вдохновляющих историй, которые стоит начинать читать и позже не раз перечитывать.
Подробнее6 книг
Топ-10 книг в жанре манга
Собрали в нашем топ-10 интересных манг самые захватывающие и культовые истории, которые понравятся не только преданным поклонникам жанра, но и тем, кто только собирается познакомиться с японскими графическими романами.
Подробнее8 книг
Лучшие экранизации книг
Топ фильмов, снятых по мотивам хороших книг: подборка экранизаций на любой вкус, которые вас точно не разочаруют. Лучше самого захватывающего фильма может быть только фильм, снятый по мотивам любимой книги!
Подробнее10 книг
10 книг на зиму
Зима — волшебное время года, когда так приятно остаться дома, расслабиться с хорошей книгой и забыть о холоде и ветре за окном. Подборка прекрасных книг для чтения зимой, которые помогут создать особое настроение и погрузиться в атмосферу тепла и уюта.
Подробнее10 книг
Темный Рыцарь: 10 главных комиксов о Бэтмене
17 сентября поклонники графических романов отмечают День Бэтмена — праздник, посвященный одному из самых культовых персонажей комиксов. По этому поводу мы собрали подборку самых интересных комиксов о Бэтмене. С чего начать знакомство с историей Темного Рыцаря? Нужно ли читать комиксы про Бэтмена по порядку? В каких графических романах появляются знаковые персонажи — Робин, Джеймс Гордон, Харви Дент и Джокер? Ответы на все эти вопросы вы найдете в нашем списке лучших комиксов о Бэтмене.
Подробнее10 книг
Книги о прошлом
Подборка интересных романов о прошлом, в которых можно увидеть исторические события глазами героев, как реальных исторических личностей, так и вымышленных персонажей, судьбы которых переплетаются на фоне знаковых событий.
Подробнее10 книг
Не пропустите новые события
Получите книгу в подарок за подписку
Нажимая на кнопку , я соглашаюсь на обработку и хранение моих персональных данных
Книги
Статьи и подборки
Авторы
Новым авторам
Серии
Архив
О нас
Контакты
Где купить книги
Сертификация
VK
VK: Комиксы
VK: Книги для детей
Азбука. Книгоголики
Азбука. Комиксы. Манга. Фантастика
Youtube
Youtube: Комиксы. Манга
ЯНДЕКС ДЗЕНПодписаться на рассылку
Нажимая на кнопку , я соглашаюсь на обработку и хранение моих персональных данных
© 2008 – 2023 ООО «Издательская Группа Азбука-Аттикус»
Разработано в AIR Production
Создание бизнес-страницы в Facebook: разделы и форматирование
Как создать бизнес-страницу в Facebook
Шаг 1. Нажмите на значок Facebook, чтобы перейти на главную страницу социальной сети. Facebook имеет группы, а также страницы. Группы лучше подходят для сообществ разной тематики, где пользователи сами создают контент. Выберите группу, если это то, что вы хотите. Если вы собираетесь создавать контент самостоятельно, будь то страница компании или ваша личная страница, чтобы продвигать себя или свою фирму, выберите базовую страницу.
Шаг 2. Открыв этот раздел, вы увидите варианты управления существующими страницами и создания новой. В разделе «Страницы» выберите «Создать страницу».
Шаг 3. Нажмите «Создать страницу». Теперь придумай имя. Он должен быть коротким, аутентичным, желательно оптимизированным для поиска и содержать ключевые слова. Если вы создаете региональное сообщество, название города также может подойти.
Шаг 4. Facebook хочет, чтобы вы выбрали категорию из выпадающего меню. Вы добавляете описание из пары предложений: о чем ваша компания, для чего страница.
Шаг 5. Нажмите «Создать страницу».
Шаг 6. Как только Facebook подтвердит, что страница создана, вы можете легко сохранить ее или продолжить форматирование. Например, вы можете добавить фотографию профиля.
Вы можете поискать в Интернете информацию о требованиях к обложкам и аватарам Facebook — размер заголовка может быть разным. Или сделать только широкое изображение в высоком разрешении, не менее 1900 пикселей в поперечнике.
Шаг 7. Страница создана. Теперь вы можете добавить кнопку, ссылку на свой веб-сайт, если он у вас есть, или в сообщения, где люди могут связаться с вами.
Настройки новой страницы Facebook
Настройки по умолчанию в большинстве случаев приемлемы. Но есть несколько мест, которые вы можете настроить.
Основные настройки
Одна важная вещь, которую вы можете сделать, это запретить другим пользователям писать что-либо на вашей стене. Заблокируйте их сообщения здесь. Они по-прежнему смогут оставлять комментарии, но не будут размещать сообщения в вашей ленте новостей. Лучше включите фильтр ненормативной лексики. Если вы собираетесь публиковать сообщения на разных языках, для этого есть опция, отключенная по умолчанию.
Сообщения
Вы можете включить автоответчик и ввести текст, который люди увидят, отправив вам сообщение.
Информация о странице
Здесь нужно ввести имя пользователя — URL страницы. Крайне важно иметь один и тот же никнейм во всех социальных сетях и на сайтах, чтобы люди могли запомнить ваш хэштег и никнейм. Добавьте контактную информацию, если она вам нужна: телефон, e-mail, сайт, обязательно добавьте адрес, если ваш бизнес региональный. Добавьте геолокацию и убедитесь, что Facebook находится в правильном доме. Добавьте рабочее время, если это применимо.
Разделы страницы
Далее вам нужно включить/отключить разделы страницы. Их довольно много — выбирайте нужные.
- События — оставьте это, если вы собираетесь их создать.
- Отзывы — могут ли другие комментировать вас или вашу компанию. Отключите, если это нежелательно.
- Видео, фото, информация и группы — нельзя отключить.
- Магазин – ваши товары.
- Вакансии, предложения – специальные акции.
- Услуги и примечания – двойные функции. В эти навигационные вкладки можно поместить некоторую информацию, но мало кто их замечает. Большинство смотрит только основную новостную ленту.
Обратите внимание, что эти разделы можно перетаскивать вверх и вниз. Если вы предпочитаете, чтобы ваши последние видео были сверху, перетащите их туда. Если вы не собираетесь публиковать видео на своей странице или размещаете их редко, вы можете перетащить это в самый низ.
Уведомления
Настройте, как вы хотите получать уведомления – на телефон, по электронной почте, через уведомления в самой социальной сети – и когда (вам понравился, появился подписчик или комментарий).
Социальная тематика и политическая реклама
Социальная тематика и политическая реклама Функции связаны с таргетингом на аудиторию. Facebook хочет, чтобы эти объявления были безопасными. Если вы не участвуете в этих областях, игнорируйте этот раздел.
Групповой доступ
Настройте доступ для нескольких администраторов или, возможно, редактора и т. д. Введите имя пользователя или адрес электронной почты, связанный с учетной записью Facebook, и назначьте роль:
- администратор: полный доступ к настройкам и управлению сообществом;
- редактор: может только создавать контент;
- модератор: только управляет комментариями.
Доступ к аналитике и кабинету объявлений: здесь вы увидите текущих менеджеров. И вы можете добавлять или удалять людей из списка.
Подключите учетную запись Instagram. В Instagram есть стандартные учетные записи пользователей и бизнес-аккаунты, которые могут создавать рекламу и иметь доступ к аналитике и статистике. Вы можете переключиться на бизнес-аккаунт с Facebook. Если у вас есть только простая учетная запись Instagram, вы можете привязать ее здесь, и вы сможете создавать рекламу, настраивать таргетинг и просматривать данные.