Как вывести результат парсинга в инлайн кнопку?

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

Коллеги Добрый день! Подскажите, aiogram библиотека, бот с инлайнкнопками, при нажатии на одну, выдается расписание в виде фото этот вариант работает, но проблема в том, что у файла расписания, каждую неделю новое название, добавил парсинг в код. Код с ручным изменением

keyboard = InlineKeyboardMarkup()
keyboard = types.InlineKeyboardMarkup(row_width=2)
menu_1 = InlineKeyboardButton(text='Расписание 🗓', callback_data="menu_1")
menu_2 = InlineKeyboardButton(text='Состав 🏒', callback_data="menu_2")
menu_3 = InlineKeyboardButton(text='🔥Заявка на турнир🔥 ', callback_data="menu_3")
menu_4 = InlineKeyboardButton(text='О команде  📌', callback_data="menu_4")
menu_5 = InlineKeyboardButton(text='Расписание игр турнира  📌', callback_data="menu_5")
keyboard.add(menu_1, menu_2, menu_3, menu_4, menu_5)

@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!\nЧто Вас интересует?", reply_markup=keyboard)

@dp.callback_query_handler(text_contains='menu_')
async def menu(call: types.CallbackQuery):
    if call.data and call.data.startswith("menu_"):
        code = call.data[-1:]
        if code.isdigit():
            code = int(code)
        if code == 1:
            text = '👉Актуальное расписание занятий!👈'
            img_url = 'http://domen.ru/_si/0/93205683.jpg'
            await call.message.edit_text(
                                         f'{text}<a href="{img_url}">.</a>', parse_mode=ParseMode.HTML, reply_markup=keyboard)

Парсинг

r = requests.get(url='http://domen.ru/index/raspisanie/0-86/')

soup = BeautifulSoup(r.text, 'lxml')

img_tags = soup.find_all('img')

for img_tag in img_tags:
    print(img_tag['src'])

В консоле вижу вывод файла в виде /_si/0/s93205683.jpg Подскажите, как реализовать вывод парсинга в кнопку?

Ответы

▲ 1

Например:

#Создадим функцию где будет генерироваться ваша кнопка
#Будет один обязательный параметр. Это ваша имя кнопки.
def creatBtn(nameBtn):
    keyboard = InlineKeyboardMarkup(row_width=1)
    btn = InlineKeyboardButton(text=nameBtn, callback_data='data') #Я обычно callback_data использую как и имя.
    keyboard.add(btn)
    return keyboard


@dp.message_handler(commands='btn')
async def send_btn(message:types.Message):
    #Начало парсинга.
    #Находим имя нового файла
    #Например: s93205683.jpg
    img_tag = 's93205683.jpg'
    await message.answer('Расписание:', reply_markup=creatBtn(img_tag))

Вместо команд, это может быть @dp.callback_query_handler реагирующий на нажатую кнопку.

введите сюда описание изображения