Юмор — канал юмористических цитат

Успех — канал успешных котировок

Вдохновение — канал цитат вдохновения

Уильям Шекспир — канал цитат Уильяма Шекспира

Джордж Р.Р. Мартин — цитаты канала Джорджа Р.Р. Мартина

Дж.К. Роулинг — Дж.К. Канал цитат Роулинг

Стивен Кинг — цитирует Стивена Кинга канал

Дж.Р.Р. Толкин — Дж.Р.Р. Канал цитат Толкиена

TolkienQuotesBot — Дж.Р.Р. Бот цитат Толкиена (отправьте случайную цитату в ответ на ваше сообщение)

Задний план

Недавно решил написать простого бота для получения опыта и последующей реализации более сложных проектов. Выбор пал на бота цитат по конкретным авторам/книгам/жанрам/тегам.

Для реализации этой идеи необходимо было выполнить два основных шага:

  1. Получите большое количество данных об авторах, книгах, цитатах, тегах и правильно структурируйте их в виде таблиц в базе данных
  2. Реализовать непосредственно серверную часть бота, которая бы обрабатывала все запросы к боту

Данные

Я проанализировал более 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 г.