Юмор — канал юмористических цитат
Успех — канал успешных котировок
Вдохновение — канал цитат вдохновения
Уильям Шекспир — канал цитат Уильяма Шекспира
Джордж Р.Р. Мартин — цитаты канала Джорджа Р.Р. Мартина
Дж.К. Роулинг — Дж.К. Канал цитат Роулинг
Стивен Кинг — цитирует Стивена Кинга канал
Дж.Р.Р. Толкин — Дж.Р.Р. Канал цитат Толкиена
TolkienQuotesBot — Дж.Р.Р. Бот цитат Толкиена (отправьте случайную цитату в ответ на ваше сообщение)
Задний план
Недавно решил написать простого бота для получения опыта и последующей реализации более сложных проектов. Выбор пал на бота цитат по конкретным авторам/книгам/жанрам/тегам.
Для реализации этой идеи необходимо было выполнить два основных шага:
- Получите большое количество данных об авторах, книгах, цитатах, тегах и правильно структурируйте их в виде таблиц в базе данных
- Реализовать непосредственно серверную часть бота, которая бы обрабатывала все запросы к боту
Данные
Я проанализировал более 5 000 000 веб-страниц и получил более 900 000 цитат с одного известного интернет-ресурса.
Для этих целей я написал небольшое Java-приложение, которое обрабатывает веб-страницу и записывает необходимую информацию в csv-файл.
Структура csv выглядит следующим образом
Цитата Автор Книга Категория Теги
Через пару дней непрерывной работы этого приложения я получил достаточное количество информации, чтобы можно было зафиксировать эту информацию в базе данных. Я не сохранял котировки напрямую в базу, так как на тот момент еще не купил сервер. знак равно
Чтобы обрабатывать csv, я создал простой класс команд laravel.
Структура базы данных:
Выполнение
Для начала купил виртуальный сервер, домен, сгенерировал SSL-сертификат.
Telegram API предоставляет два взаимоисключающих способа получения обновлений бота:
- Вебхуки
- Опрос через метод getUpdates
Я думаю, что первый способ более масштабируемый, потому что запросы веб-перехватчиков могут быть сбалансированы по нагрузке между неограниченным количеством экземпляров ваших бот-приложений. Поэтому я решил использовать вебхуки.
Для реализации телеграмм-ботов на Laravel я использовал Telegram Bot API PHP SDK с GitHub.
Сначала я создал бота, который отправлял случайную цитату J.R.R. Толкиена заказывает раз в час и в ответ на любое сообщение от пользователя.
TolkienQuotesBot — вот он.
Но потом я решил перенести функционал почасовой отправки сообщения на канал (jrr_tolkien_quotes), чтобы уменьшить количество запросов с моего сервера. Я сделал это просто добавив бота в телеграмм канал и дав ему права администратора, а в коде я просто каждый час отправляю сообщения на этот канал.
каналы
По аналогии я создал следующие каналы:
Юмор — Юмористические цитаты
Успех — цитаты об успехе
Вдохновение — вдохновляющие цитаты
Уильям Шекспир — цитаты Уильяма Шекспира
Джордж Р. Р. Мартин — цитирует Джорджа Р. Р. Мартина
Дж.К. Роулинг — Дж.К. Цитаты Роулинг
Стивен Кинг — цитаты Стивена Кинга
Дж.Р.Р. Толкин — Дж.Р.Р. Цитаты Толкина
Резюме
В этом посте я описал, что мне понадобилось для создания простых телеграм-ботов и каналов.
Первоначально опубликовано на it.badykov.com 11 февраля 2019 г.