Passed
Pull Request — master (#90)
by
unknown
02:32
created

rssbot   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 30
dl 0
loc 46
rs 10
c 0
b 0
f 0
wmc 6

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