【问题标题】:Spidermon: How to include message in telegram bot?Spidermon:如何在电报机器人中包含消息?
【发布时间】:2020-09-17 23:24:37
【问题描述】:

我正在尝试实现 spidermon 来监控 scrapyd:

https://github.com/scrapinghub/spidermon/blob/master/spidermon/contrib/scrapy/monitors.py https://spidermon.readthedocs.io/en/latest/monitors.html#is-there-a-basic-scrapy-suite-ready-to-use

目前它监控最小项目数和最大错误数量。如果出现错误,它会通过电报发送消息。不知何故,文档一定是错误的,或者我的实现,因为错误或项目的数量不会包含在消息中:

    from spidermon import Monitor, MonitorSuite, monitors
    from spidermon.contrib.actions.telegram.notifiers import SendTelegramMessageSpiderFinished
    from spidermon.contrib.monitors.mixins import StatsMonitorMixin


    @monitors.name('Item count')
    class ItemCountMonitor(Monitor):

        @monitors.name('Minimum number of items')
        def test_minimum_number_of_items(self):
            item_extracted = getattr(
                self.data.stats, 'item_scraped_count', 0)
            minimum_threshold = 500

            msg = 'Extracted less than {} items'.format(
                minimum_threshold)
            self.assertTrue(
                item_extracted >= minimum_threshold, msg=msg
            )

    @monitors.name("Error Count Monitor")
    class ErrorCountMonitor(Monitor):
        """Check for errors in the spider log.
        You can configure the expected number of ERROR log messages using
        ``SPIDERMON_MAX_ERRORS``. The default is ``0``."""

        @monitors.name("Should not have any errors")
        def test_max_errors_in_log(self):
            errors_threshold = self.crawler.settings.getint(SPIDERMON_MAX_ERRORS, 0)
            no_of_errors = self.stats.get("log_count/ERROR", 0)
            msg = "Found {} errors in log, maximum expected is " "{}".format(
                no_of_errors, errors_threshold
            )
            self.assertTrue(no_of_errors <= errors_threshold, msg=msg)


    class SpiderCloseMonitorSuite(MonitorSuite):

        monitors = [
            ItemCountMonitor,
            # ItemValidationMonitor,
            ErrorCountMonitor
        ]

        monitors_failed_actions = [
            SendTelegramMessageSpiderFinished,
        ]

如何将消息文本包含在电报通知中?

【问题讨论】:

  • 我认为msg 只出现在标准输出中,因为它在 Slack 中过于冗长,据我所知,文档并没有说明,所以我认为没有这里有一个文档错误。你想要的可能可以用 Spidermon 模板完成,但我对它们不够熟悉,无法提供帮助:(
  • @Gallaecio 我认为文档中可能缺少一两件事。 source code 中的设置 SPIDERMON_SLACK_NOTIFIER_INCLUDE_OK_ATTACHMENTSSPIDERMON_SLACK_NOTIFIER_INCLUDE_ERROR_ATTACHMENTS 似乎与我在回答中提到的关于 Telegram 的设置类似。

标签: scrapy scrapyd spidermon


【解决方案1】:

您可以在settings.py 或您的爬虫设置中设置两个选项。
要仅包含您要求的错误消息,您可以将SPIDERMON_TELEGRAM_NOTIFIER_INCLUDE_ERROR_MESSAGES 设置为True。 如果您还想在没有错误的情况下获得更详细的消息,您可以添加 SPIDERMON_TELEGRAM_NOTIFIER_INCLUDE_OK_MESSAGES 并将其设置为 True

我找不到任何文档,所以我必须将您指向源代码:SendTelegramMessageSpiderFinished

将以下内容添加到您的 settings.py 应该可以说服 message template 为您提供完整的输出:

SPIDERMON_TELEGRAM_NOTIFIER_INCLUDE_OK_MESSAGES = True
SPIDERMON_TELEGRAM_NOTIFIER_INCLUDE_ERROR_MESSAGES = True

【讨论】:

  • 不幸的是没有效果。
猜你喜欢
  • 1970-01-01
  • 2019-09-16
  • 2016-03-11
  • 2018-02-25
  • 2017-03-19
  • 2017-07-17
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多