Telegram бот-парсер (Python + aiogram3)

Пишу бота-парсера (в учебных целях).

По команде /start он парсит последние N статей с хабра и присылает сообщением. Вопросы:

  1. Результат парсинга я записываю в str, это адекватно? Я не придумал как это хранить. Словарь?
  2. Нарушены ли где-то принципы асинхронности?
  3. Чтобы бот парсил раз в час, достаточно ли обернуть внутрянку функции start_command(message: Message) в цикл и добавить sleep? Это вообще правильно?
  4. Как сделать так, чтобы новый парсинг не включал результаты предыдущего? Я так полагаю изначально надо результат хранить по другому (например, словарь), чтобы была возможность сравнивать по заголовкам. Так?
  5. Вообще любую фильтрацию лучше делать в процессе парсинга или в процессе склеивания ответа?
  6. Как хранить токен, если я запускаю код в google collab?
  • Код:
    import aiogram
    import asyncio
    from aiogram.filters import Command
    from aiogram.types import Message
    from aiogram import Dispatcher, Bot, Router
    from bs4 import BeautifulSoup
    import requests
    
    TOKEN = 'Здравствуйте'
    
    bot = Bot(token=TOKEN)
    dp = Dispatcher()
    router = Router()
    
    @router.message(Command("start"))
    async def start_command(message: Message):
        await message.answer('Last N articles:')
        html = requests.get('https://habr.com/ru/articles/').text
        soup = BeautifulSoup(html, 'html.parser')
    
        find_limit = 10
        articles = soup.find_all('article', class_='tm-articles-list__item', limit=find_limit)
        msg = ''
    
        for i, article in enumerate(articles, start=1):
            link = article.find('a', class_='tm-title__link')
            date = article.find('a', class_='tm-article-datetime-published').find('time')
            msg += f'{i}: {link.text}\n'
            msg += 'https://habr.com' + link.get('href') + '\n'
            article_datetime = date.get('title')[-5:]
            msg += f'Время публикации: {article_datetime}\n'
    
        await message.answer(msg)
    
    
    dp.include_router(router)
    await dp.start_polling(bot)```

Ответы (0 шт):