Files
kasu/aggregator/management/commands/update-feeds.py
2014-11-26 13:13:07 +01:00

60 lines
2.4 KiB
Python

"""
Update feeds for Django community page. Requires Mark Pilgrim's excellent
Universal Feed Parser (http://feedparser.org)
"""
from aggregator.models import Feed
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "Updates all RSS Feeds"
def parse_feed(self, feed, verbose=True):
parsed_feed = feedparser.parse(feed.feed_url)
html_parser = HTMLParser.HTMLParser()
for entry in parsed_feed:
title = entry.title.encode(parsed_feed.encoding, "xmlcharrefreplace")
guid = entry.get("id", entry.link).encode(parsed_feed.encoding, "xmlcharrefreplace")
link = entry.link.encode(parsed_feed.encoding, "xmlcharrefreplace")
if verbose:
print '>' , title
if not guid:
guid = link
if hasattr(entry, "summary"):
content = entry.summary
elif hasattr(entry, "content"):
content = entry.content[0].value
elif hasattr(entry, "description"):
content = entry.description
else:
content = u""
content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
try:
if entry.has_key('modified_parsed'):
date_modified = datetime.fromtimestamp(time.mktime(entry.modified_parsed))
elif parsed_feed.feed.has_key('modified_parsed'):
date_modified = datetime.fromtimestamp(time.mktime(parsed_feed.feed.modified_parsed))
elif parsed_feed.has_key('modified'):
date_modified = datetime.fromtimestamp(time.mktime(parsed_feed.modified))
else:
date_modified = datetime.now()
except TypeError:
date_modified = datetime.now()
try:
feed.feeditem_set.get(guid=guid)
except FeedItem.DoesNotExist:
feed.feeditem_set.create(title=title, link=link, summary=content, guid=guid, date_modified=date_modified)
def handle(self, *args, **options):
verbose = int(options['verbosity']) > 0
for feed in Feed.objects.filter(is_functional=True):
if (verbose):
print
print "%s - URL: %s" % (feed.title, feed.feed_url)
print '=' * 80
feed.parse()