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)
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)
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)
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)
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)
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)
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)
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)
def test_last_content_empty(self): rule = '' content = '变化' last_content = '' res = is_changed(rule, content, last_content) self.assertEqual(res, 3)
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()
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()