Diverse Code Cleanups
*Code wurde PEP-8 gerecht formatiert * Kleine Fehler die der PyCharm Inspector beanstandet wurden korrigiert
This commit is contained in:
committed by
Christian Berg
parent
f34281089d
commit
86a0db050d
@@ -1,7 +1,8 @@
|
||||
from django.contrib import admin
|
||||
from models import Feed, FeedItem
|
||||
|
||||
admin.site.register(Feed,
|
||||
admin.site.register(
|
||||
Feed,
|
||||
list_display=["title", "public_url", "last_update", 'is_functional'],
|
||||
list_filter=["is_functional"],
|
||||
ordering=["title"],
|
||||
@@ -9,7 +10,8 @@ admin.site.register(Feed,
|
||||
list_per_page=500,
|
||||
)
|
||||
|
||||
admin.site.register(FeedItem,
|
||||
admin.site.register(
|
||||
FeedItem,
|
||||
list_display=['title', 'feed', 'date_modified'],
|
||||
list_filter=['feed'],
|
||||
search_fields=['feed__title', 'feed__public_url', 'title'],
|
||||
|
||||
@@ -2,12 +2,13 @@ import django.contrib.syndication.views
|
||||
from .models import FeedItem
|
||||
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class LatestFeedItems(django.contrib.syndication.views.Feed):
|
||||
link = "http://aol.animanga.at/"
|
||||
description = "Aktuelle Nachrichten aus der Austrian Otaku League"
|
||||
title = "AOL - Newsfeed"
|
||||
|
||||
def items(self, obj):
|
||||
def items(self):
|
||||
return FeedItem.objects.get_recent_items()
|
||||
|
||||
def item_title(self, item):
|
||||
|
||||
@@ -6,53 +6,14 @@ 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):
|
||||
if verbose:
|
||||
print
|
||||
print "%s - URL: %s" % (feed.title, feed.feed_url)
|
||||
print '=' * 80
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'''
|
||||
"""
|
||||
Created on 05.02.2011
|
||||
|
||||
@author: christian
|
||||
'''
|
||||
"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from django.conf import settings
|
||||
@@ -14,8 +14,8 @@ import django.db.models
|
||||
import feedparser
|
||||
import urllib2
|
||||
|
||||
class FeedManager(django.db.models.Manager):
|
||||
|
||||
class FeedManager(django.db.models.Manager):
|
||||
def active(self):
|
||||
site = settings.SITE_ID
|
||||
feeds = self.filter(is_functional=True, site=site)
|
||||
@@ -28,12 +28,13 @@ class FeedManager(django.db.models.Manager):
|
||||
feed.parse()
|
||||
return feeds
|
||||
|
||||
class FeedItemManager(django.db.models.Manager):
|
||||
|
||||
class FeedItemManager(django.db.models.Manager):
|
||||
def recent_items(self, max_items=10, site=None):
|
||||
site = site or settings.SITE_ID
|
||||
return self.select_related().filter(feed__site=site)[:max_items]
|
||||
|
||||
|
||||
class Feed(models.Model):
|
||||
title = models.CharField(max_length=500)
|
||||
site = models.ForeignKey(Site)
|
||||
@@ -61,19 +62,22 @@ class Feed(models.Model):
|
||||
|
||||
link = feed_entry.link
|
||||
guid = feed_entry.get("id", link)
|
||||
summary = html_parser.unescape(feed_entry.get("summary",
|
||||
feed_entry.get("description", feed_entry.get("content", u""))
|
||||
))
|
||||
summary = html_parser.unescape(
|
||||
feed_entry.get("summary", feed_entry.get(
|
||||
"description",
|
||||
feed_entry.get("content", u"")
|
||||
))
|
||||
)
|
||||
date_modified = feed_entry.get("published_parsed", parsed_feed.get("published_parsed", timezone.now))
|
||||
date_modified = timezone.make_aware(datetime(*date_modified[:6]), timezone.get_current_timezone())
|
||||
|
||||
feed_item, updated = self.feed_items.get_or_create(guid=guid,
|
||||
defaults={
|
||||
'title': title,
|
||||
'link': link,
|
||||
'summary': summary,
|
||||
'date_modified': date_modified
|
||||
})
|
||||
defaults={
|
||||
'title': title,
|
||||
'link': link,
|
||||
'summary': summary,
|
||||
'date_modified': date_modified
|
||||
})
|
||||
feed_item.save()
|
||||
self.last_update = timezone.now()
|
||||
return self.save()
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.contrib.sitemaps import Sitemap
|
||||
from models import FeedItem
|
||||
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class FeedItemSitemap(Sitemap):
|
||||
changefreq = "never"
|
||||
priority = 0.5
|
||||
@@ -9,4 +11,4 @@ class FeedItemSitemap(Sitemap):
|
||||
return FeedItem.objects.get_recent_items()
|
||||
|
||||
def lastmod(self, obj):
|
||||
return obj.date_modified
|
||||
return obj.date_modified
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from django import template
|
||||
from aggregator.models import Feed
|
||||
from models import Feed
|
||||
|
||||
|
||||
class FeedListNode(template.Node):
|
||||
@@ -12,6 +12,7 @@ class FeedListNode(template.Node):
|
||||
return ''
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
def do_get_feed_list(parser, token):
|
||||
"""
|
||||
{% get_feed_list as feed_list %}
|
||||
|
||||
Reference in New Issue
Block a user