Как вывести результат парсинга в инлайн кнопку?
Коллеги Добрый день! Подскажите, 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 шт):
Автор решения: 1001001
→ Ссылка
Например:
#Создадим функцию где будет генерироваться ваша кнопка
#Будет один обязательный параметр. Это ваша имя кнопки.
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 реагирующий на нажатую кнопку.
