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

rssbot.RssRobot.remove_old_history()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
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