Passed
Push — master ( 5d804e...d5e461 )
by Leon
02:23
created

rssbot   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 29
dl 0
loc 45
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A RssRobot.main() 0 18 5
A RssRobot.remove_old_history() 0 5 1
1
# -*- encoding: utf-8 -*-
2
"""
3
cron: */15 6-22 * * *
4
new Env('RSS 订阅推送');
5
"""
6
7
import feedparser
8
9
from datetime import datetime, timedelta
10
from models import db, Rss, History
11
from notify_mtr import send
12
13
14
class RssRobot:
15
16
    def main(self):
17
        self.remove_old_history()
18
        rss_list = Rss.select()
19
        msg = ""
20
        post_url_list = [rss_history.url for rss_history in
21
                         History.select().where(History.publish_at == datetime.today().strftime("%Y-%m-%d"))]
22
        for rss in rss_list:
23
            rss_history_list = []
24
            feed = feedparser.parse(rss.feed)
25
            for entry in feed.entries:
26
                if entry.link not in post_url_list:
27
                    msg = msg + f"{entry.title}\n{entry.link}\n\n"
28
                    rss_history_list.append(History(url=entry.link))
29
30
            with db.atomic():
31
                History.bulk_create(rss_history_list, batch_size=10)
32
33
        return msg
34
35
    def remove_old_history(self):
36
        # 只保留最近一周的记录
37
        week_date_range = datetime.now() + timedelta(days=-7)
38
        History.delete().where(History.publish_at <
39
                               week_date_range.strftime("%Y-%m-%d")).execute()
40
41
42
if __name__ == '__main__':
43
    res = RssRobot().main()
44
    send("RSS 订阅", res)
45