Python Telegram-бот, который получает статистику от Scrapy - PullRequest
0 голосов
/ 01 августа 2020

Я бы хотел написать бота для Telegram, который может предоставлять статистику Scrapy по запросу . Моя попытка в основном работает, единственная проблема заключается в том, что принудительное закрытие паука (очевидно) не останавливает бота.

Итак, у меня есть два вопроса:

  • - это мой общий подход. правильный?
  • можно ли закрыть бота даже при принудительном отключении паука?

Вот соответствующий класс:

class TelegramBot(object):
    telegram_token = telegram_credentials.token

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)

    def __init__(self, crawler):
        self.crawler = crawler

        cs = crawler.signals
        cs.connect(self._spider_closed, signal=signals.spider_closed)

        """Start the bot."""
        # Create the Updater and pass it your bot's token.
        # Make sure to set use_context=True to use the new context based callbacks
        # Post version 12 this will no longer be necessary
        self.updater = Updater(self.telegram_token, use_context=True)

        # Get the dispatcher to register handlers
        dp = self.updater.dispatcher

        # on different commands - answer in Telegram
        dp.add_handler(CommandHandler("stats", self.stats))

        # Start the Bot
        self.updater.start_polling()

    def _spider_closed(self, spider, reason):
        # Stop the Bot
        self.updater.stop()

    def stats(self, update, context):
        # Send a message with the stats
        msg = (
            "Spider "
            + self.crawler.spider.name
            + " stats: "
            + str(self.crawler.stats.get_stats())
        )

        update.message.reply_text(msg)

Вот вам могу найти мой полный код в учебнике Scrapy, цитирует паук https://github.com/jtommi/scrapy_telegram-bot_example/blob/master/tutorial/tutorial/telegram-bot.py

Мой код представляет собой комбинацию

1 Ответ

0 голосов
/ 05 августа 2020

Вызов updater.stop() обязательно остановит бота. Из документов python-telegram-bot,

 """Stops the polling/webhook thread, the dispatcher and the job queue."""

Проверьте, вызывается ли updater.stop() после закрытия паука. Бот может не остановиться немедленно, но в конечном итоге остановится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...