Сразу на входе скажу - это инструкция не для разработчиков, это инструкция для тех, кто вообще ничего не понимает в программировании, но очень хочет сделать простого бота, который бы умел искать по сайту. Идея такой статьи появилась после того, как я сам долго гуглил и не мог найти, как вообще такое делается, а после, немного разобравшись понял, что тут все просто. Поэтому это не открытие Америки, а простая инструкция для вас, если вы не хотите разбираться, платить деньги, а просто быстро запустить простого бота. Инструкция от начала и до конца - как сделать и запустить.
Что получим?
Что мы получим? Получим бота ( пример бота), который умеет искать по сайту и присылает пользователю ссылку на статью или набор ссылок на статьи. В названии я написал Wordpress, но по идее любой сайт. который поддерживает RestApi. Показывать буду на примере своего сайта, для которого это делал. Итак есть контентный сайт gdesnimali.ru, сайт на wordpress и каждый пост там - это описание локаций того или иного фильма. Искать мы будем только по названию фильма, а оно указано в заголовке, поэтому интересует поиск только по заголовку. Мы ожидаем, что в бота человек напишет название фильма, а в ответ хочет получить все что найдет поисковик на сайте.
Создание бота в телеграм
Идем по ссылке t.me/BotFather - это чат бот для создания ботов. Там пишем /newbot, он попросит выбрать нас название для своего бота, обязательное требование, чтобы название заканчивалось на _bot, поэтому у меня gdesnimali_bot
Если название подошло, то нам покажется сообщение где будет токен, он то нам и нужен. Выглядит это примерно так:
Use this token to access the HTTP API:
5133698220:AAHqiEwVzn0lH2nrwqntlHNmYeQecGL0x
Знайте, любой кто получит этот токен сможет управлять ботом, поэтому никому его не показывайте.
Но не спешите уходить из бота, он знает еще две нужные нам команды:
/setuserpic
- отправляйте команду и следом картинуку, которая будет аватаркой бота.
/setdescription
- отправляйте команду и следом описание вашего бота, которое будет высвечиваться пользователю до нажатия кнопки старт. Тут важно емко и интересно описать, что бот делает, чтобы пользователь не удалил его сразу.
Адаптируем код
Итак, я не программист, поэтому кто-то может уйти в депрессию от моего кода, но главное - он работает. Код просто копируем и правим пару мест
import telebot
import requests
from telebot import types
bot = telebot.TeleBot('ВОТ ТУТ НУЖНО ВСТАВИТЬ КОД ОТ ТЕЛЕГРАМ')
bot.remove_webhook()
@bot.message_handler(commands=['start'])
def start_message(message):
user_id = message.from_user.id
pressStartButton = 'Кнопка старт'
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
filmSearchButton = types.KeyboardButton('ВОТ ТУТ КНОПКА ДЛЯ СТАРТА ПОИСКА')
markup.add (filmSearchButton)
bot.send_message(message.chat.id, "ВОТ ТУТ ПРИВЕТСТВЕННОЕ СООБЩЕНИЕ БОТА ПОСЛЕ КНОПКИ СТАРТ",
parse_mode='html', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def lalala (message):
if message.chat.type == 'private':
if message.text == 'ВОТ ТУТ КНОПКА ДЛЯ СТАРТА ПОИСКА':
bot.send_message(message.chat.id, 'ВОТ ТУТ ОПИСАНИЕ ЧТО МОЖНО ИСКАТЬ')
else:
user_id = message.from_user.id
searchQuery = message.text
url = f"ВОТ ТУТ АДРЕС ВАШЕГО САЙТА wp-json/wp/v2/posts?search={searchQuery}"
responce = requests.get(url)
if not responce.json():
bot.send_message(message.chat.id, 'Я ничего не нашел по вашему запросу')
for SearchResult in responce.json():
title = SearchResult['title']
completeMessage = f"{title['rendered']} {SearchResult['link']}"
bot.send_message(message.chat.id, completeMessage)
bot.polling(none_stop=True)
Что нужно в нем поменять?
Где надпись "ВОТ ТУТ НУЖНО ВСТАВИТЬ КОД ОТ ТЕЛЕГРАМ" - нужно вставить код который вы получили в телеграм при создании бота.
Где надпись "ВОТ ТУТ АДРЕС ВАШЕГО САЙТА" - должно получиться вот так, только вначале ваш сайт - f"https://gdesnimali.ru/wp-json/wp/v2/posts?search={searchQuery}"
Где надпись "ВОТ ТУТ КНОПКА ДЛЯ СТАРТА ПОИСКА" (Обратите внимание она в коде два раза, оба раза должно быть одинаково до символа" - нужно написать просто на русском запрос на поиск, у меня написано "Искать фильм" - это кнопка которая будет снизу в меню, при ее нажатии он выведет сообщение "ВОТ ТУТ ОПИСАНИЕ, ЧТО МОЖНО ИСКАТЬ" - у меня это "Введите название фильма".
Готово, теперь вам нужно просто сохранить этот код в файле питон, т.е. он должен заканчиваться на .py, например bot.py проще всего код вставить в обычный блокнот, там поправить и потом нажать "сохранить как" и сразу опубликовать с нужным форматом .py
Запуск на сервере
Бот должен где-то работать и он не может это делать на серверах телеграм.
Для своего бота я использую VPS сервер своего сайта и это было отдельным приключением все там настроить и установить. Вам я предлагаю использовать, как минимум на первое время хостинг pythoneverywhere. Он бесплатный для одного проекта. И есть отличная инструкция как запустить там бота. Я не буду ее переписывать, просто используйте код полуенный выше вместо кода в инструкции (Например эта: ссылка на инструкцию).
Комментарии (4)
makar_crypt
07.04.2022 07:48Привет. Спасибо за статью.
Как можно выдернуть урл на медиа ресурсы, например на видео? Мы долго рыскали по API , но не нашли такого функционала. При этом знаем что существуют боты которые формируют эти линки если переслать им сообщение с видео.
Спасибо.
RockyMotion Автор
07.04.2022 07:52Как писал в статье, я вообще не программист, но мой взгляд проще всего посмотреть скриптом весь текст статьи и взять ссылки которые ведут на медиа хранилище?
aik
А просто поисковик на сайте не годится? В том же вордпрессе встроенный есть.
RockyMotion Автор
Чат бот - это интерфейс который под рукой в телефоне всегда, не нужно сайт запоминать. Многим пользователям такое удобнее, чем сайт или приложение. Мы через restapi как раз и обращаемся к встроенному в WP поиску, если его не подменили на другой.