""" 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()