aboutsummaryrefslogtreecommitdiffstats
path: root/aggregator/management/commands/loadfeeds.py
blob: bedf65d3f336219ad82f813e6eb9d85d232b065f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import feedparser
import datetime
import markdown

from django.core.management.base import BaseCommand

from aggregator.models import Feed, Post

class Command(BaseCommand):
    help = "Load data from saved feeds."

    def handle(self, *args, **kwargs):
        feeds = Feed.objects.all()

        for feed in feeds:
            parsed = feedparser.parse(feed.get_feed_url())

            if 'title' in parsed.feed:
                feed.title = parsed.feed.title

            for entry in parsed.entries:
                if not Post.objects.filter(post_id=entry.id).exists():
                    dt = entry.updated_parsed \
                         or entry.published_parsed \
                         or datetime.datetime.now()
                    updated = datetime.datetime(
                        dt.tm_year, dt.tm_mon, dt.tm_mday,
                        dt.tm_hour, dt.tm_min, dt.tm_sec)
                    post = Post(post_id=entry.id,
                                title=entry.title,
                                remote_url=entry.link,
                                updated=updated,
                                feed=feed)

                    if 'content' in entry.keys():
                        content = entry.content[0]['value']
                    else:
                        content = entry.summary
                            
                    if feed.with_markdown:
                        post.body = markdown.markdown(content)
                    else:
                        post.body = content

                    post.save()

            if feed.post_set.count() > 0:
                last_updated = feed.post_set.order_by('-updated')[0]\
                                            .updated
                feed.updated = last_updated

            feed.save()