Потребность

Часто пользователи желают смотреть только те новости, которые им интересны. Поэтому у пользователя должна быть возможность поиска.

Решение

Сделаем бота с возможностью поиска по новостной ленте и подключим его в канал Телеграм. Сценарий:



Как это работает

На первом экране у нас блок Текст с приветствием и блок Фраз. В блоке Фразы напишем один пример - нашу системную сущность $TEXT - она принимает любой текст.



От фразы с сущностью $TEXT делаем следующий экран с блоком HTTP-запрос. В запросе мы будем обращаться к новостному порталу. В данном примере мы выбрали новости от Рамблера, так как там можно будет получить ответ в формате json. Для этого
заходим в браузер Google Chrome, на странице Рамблер/новости нажимаем правую кнопку мыши и выбираем пункт “Просмотреть код”. Откроется инспектор. Нажмите там на вкладку Network, чтобы увидеть все запросы, которые посылаются с данной страницы сайта. Теперь попробуйте что-нибудь поискать на сайте. Вы увидите в инспекторе, что поисковые запросы уходят по адресу такого вида:

https://nova.rambler.ru/localsearchv4/?query=запрос&from=0&size=10&project=news_media&timeout=6000

В результате запроса возвращается ответ в таком формате:



То есть JSON объект, в котором есть массив blocks, массив data - наш искомый массив найденных новостей. У каждой новости есть поле title_for_path - заголовок новости, url - урл полной статьи с сайта, массив tags - теги.

Теперь вернемся к нашему http-запросу. URL будет выглядеть так: https://nova.rambler.ru/localsearchv4/?query=${TEXT}&from=0&size=10&project=news_media&timeout=6000

Когда пользователь говорит фразу, бот автоматически сохраняет ее в переменную $TEXT и подставляет в URL запроса. Таким образом он получает новости, которые подходят под запрос.

Также добавьте переменную $result:

$httpResponse.blocks[0].data



Далее, от блока "HTTP-запрос завершен успешно" делаем блок Условие, и напишем $result.first() - берем первую новость.



От этого условия делаем новый экран. Добавим блок Текст, в котором выведем заголовок новости, а также хештеги. Выглядеть это будет так:



Также добавим на этот экран кнопку-ссылку "Читать подробности". Вставим в поле Ссылка - $result.current().url. Добавим кнопку ''Далее", она будет листать новости.



От кнопки Далее, делаем блок Условие, напишем там $result.next() - берем следующую новость. От этого условия делаем связь с блоком, где выводим заголовок новости. Сделаем логику по ветке else на тот случай когда у нас закончатся новости по определенному запросу. В итоге у нас получится такая конструкция:



Вот и все, теперь можем посмотреть как это будет работать в телеграме:

Была ли эта статья полезна?
отменить
Спасибо!