Example #1
0
    def test_contains(self):
        rule = '-contain 变化'
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-contain 变化'
        content = '你好'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)
Example #2
0
    def test_contains(self):
        rule = '-contain 变化'
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertTrue(res)

        rule = '-contain 变化'
        content = '你好'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertFalse(res)
Example #3
0
    def test_no_rule(self):
        rule = ''
        content = '变化'
        last_content = '变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = ''
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 3)
Example #4
0
    def test_no_rule(self):
        rule = ''
        content = '变化'
        last_content = '变化'
        res = is_changed(rule, content, last_content)
        self.assertFalse(res)

        rule = ''
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertTrue(res)
Example #5
0
    def test_equal(self):
        rule = '-equal 3'
        content = '3.1'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-equal 3'
        content = '3'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-equal 3'
        content = '3'
        last_content = '3'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)
Example #6
0
    def test_less(self):
        rule = '-less 3'
        content = '3'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-less 3'
        content = '2.9'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-less 3.1'
        content = '3'
        last_content = '3'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)
Example #7
0
    def test_decrease(self):
        rule = '-decrease 3'
        content = '1882.1'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-decrease 3'
        content = '1882'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-decrease 0'
        content = '1888.1'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = '-decrease 0'
        content = '1888.0'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)
Example #8
0
    def test_decrease(self):
        rule = '-decrease 3'
        content = '1882.1'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertFalse(res)

        rule = '-decrease 3'
        content = '1882'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertTrue(res)

        rule = '-decrease 0'
        content = '1888.1'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertFalse(res)

        rule = '-decrease 0'
        content = '1888.0'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertTrue(res)
Example #9
0
 def test_last_content_empty(self):
     rule = ''
     content = '变化'
     last_content = ''
     res = is_changed(rule, content, last_content)
     self.assertEqual(res, 3)
Example #10
0
def monitor(id, type):
    with app.app_context():
        status = '成功执行但未监测到变化'
        try:
            if type == 'html':
                task = Task.query.filter_by(id=id).first()
                url = task.url
                selector_type = task.selector_type
                selector = task.selector
                is_chrome = task.is_chrome
                regular_expression = task.regular_expression
                mail = task.mail
                wechat = task.wechat
                name = task.name
                rule = task.rule
                headers = task.headers

                last = Content.query.filter_by(task_id=id,
                                               task_type=type).first()
                if not last:
                    last = Content(id)

                last_content = last.content
                content = get_content(url, is_chrome, selector_type, selector,
                                      regular_expression, headers)
                if is_changed(rule, content, last_content):
                    msg = wraper_msg(content, url)
                    send_message(msg, name, mail, wechat)
                    last.content = content
                    db.session.add(last)
                    db.session.commit()
                    status = '监测到变化,最新值:' + content
            elif type == 'rss':
                rss_task = RSSTask.query.filter_by(id=id).first()
                url = rss_task.url
                name = rss_task.name
                mail = rss_task.mail
                wechat = rss_task.wechat

                last = Content.query.filter_by(task_id=id,
                                               task_type=type).first()
                if not last:
                    last = Content(id, 'rss')

                last_guid = last.content
                item = get_rss_content(url)
                if item['guid'] != last_guid:
                    content = wraper_rss_msg(item)
                    send_message(content, name, mail, wechat)
                    last.content = item['guid']
                    db.session.add(last)
                    db.session.commit()
                    status = '监测到变化,最新值:' + item['title']

        except FunctionTimedOut:
            logger.error(traceback.format_exc())
            status = '解析RSS超时'
        except Exception as e:
            logger.error(traceback.format_exc())
            status = repr(e)

        task_status = TaskStatus.query.filter_by(task_id=id,
                                                 task_type=type).first()
        task_status.last_run = datetime.now()
        task_status.last_status = status
        db.session.add(task_status)
        db.session.commit()
Example #11
0
def monitor(id, type):
    with app.app_context():
        status = ''
        global_content = None
        try:
            if type == 'html':
                task = Task.query.filter_by(id=id).first()
                url = task.url
                selector_type = task.selector_type
                selector = task.selector
                is_chrome = task.is_chrome
                regular_expression = task.regular_expression
                mail = task.mail
                wechat = task.wechat
                pushover = task.pushover
                name = task.name
                rule = task.rule
                headers = task.headers

                last = Content.query.filter_by(task_id=id,
                                               task_type=type).first()
                if not last:
                    last = Content(id)

                last_content = last.content
                content = get_content(url, is_chrome, selector_type, selector,
                                      regular_expression, headers)
                global_content = content
                status_code = is_changed(rule, content, last_content)
                logger.info(
                    'rule: {}, content: {}, last_content: {}, status_code: {}'.
                    format(rule, content, last_content, status_code))
                if status_code == 1:
                    status = '监测到变化,但未命中规则,最新值为{}'.format(content)
                    last.content = content
                    db.session.add(last)
                    db.session.commit()
                elif status_code == 2:
                    status = '监测到变化,且命中规则,最新值为{}'.format(content)
                    msg = wraper_msg(content, url)
                    send_message(msg, name, mail, wechat, pushover)
                    last.content = content
                    db.session.add(last)
                    db.session.commit()
                elif status_code == 3:
                    status = '监测到变化,最新值为{}'.format(content)
                    msg = wraper_msg(content, url)
                    send_message(msg, name, mail, wechat, pushover)
                    last.content = content
                    db.session.add(last)
                    db.session.commit()
                elif status_code == 0:
                    status = '成功执行但未监测到变化,当前值为{}'.format(content)
            elif type == 'rss':
                rss_task = RSSTask.query.filter_by(id=id).first()
                url = rss_task.url
                name = rss_task.name
                mail = rss_task.mail
                wechat = rss_task.wechat
                pushover = rss_task.pushover

                last = Content.query.filter_by(task_id=id,
                                               task_type=type).first()
                if not last:
                    last = Content(id, 'rss')

                last_guid = last.content
                item = get_rss_content(url)
                global_content = item['guid']
                if item['guid'] != last_guid:
                    content = wraper_rss_msg(item)
                    send_message(content, name, mail, wechat, pushover)
                    last.content = item['guid']
                    db.session.add(last)
                    db.session.commit()
                    status = '监测到变化,最新值:' + item['guid']
                status = '成功执行但未监测到变化,当前值为{}'.format(last_guid)

        except FunctionTimedOut:
            logger.error(traceback.format_exc())
            status = '解析RSS超时'
        except PartNotificationError as e:
            logger.error(traceback.format_exc())
            status = repr(e)
            last.content = global_content
            db.session.add(last)
            db.session.commit()
        except Exception as e:
            logger.error(traceback.format_exc())
            status = repr(e)

        task_status = TaskStatus.query.filter_by(task_id=id,
                                                 task_type=type).first()
        task_status.last_run = datetime.now()
        task_status.last_status = status
        db.session.add(task_status)
        db.session.commit()