List top posters and top teams, instead of just listing all feeds.
authorMagnus Hagander <magnus@hagander.net>
Fri, 22 May 2009 19:49:24 +0000 (15:49 -0400)
committerMagnus Hagander <magnus@hagander.net>
Fri, 22 May 2009 19:49:24 +0000 (15:49 -0400)
Also show how many posts each of them have.

generator.py
planethtml.py
template/index.tmpl

index 6a1f91eb2bc0d901df7ffbf9cf036d51994c7011..2a82fa2f11dc44e7fbef671678a99c392af68d28 100755 (executable)
@@ -34,7 +34,8 @@ class Generator:
                                        char_encoding='utf8',
                                        )
                self.items = []
-               self.feeds = []
+               self.topposters = []
+               self.topteams = []
                self.staticfiles = ['policy','add']
 
                settings.configure(
@@ -76,9 +77,15 @@ class Generator:
                                description=desc))
                        self.items.append(PlanetPost(post[0], post[1], post[2], post[3], post[5], post[6], desc, post[8], post[9]))
 
-               c.execute("SELECT name,blogurl,feedurl FROM planet.feeds WHERE approved ORDER BY name")
+               c.execute("SELECT name,blogurl,feedurl,count(*) FROM planet.feeds INNER JOIN planet.posts ON planet.feeds.id=planet.posts.feed WHERE age(dat) < '1 month' AND team IS NULL GROUP BY name,blogurl,feedurl")
                for feed in c.fetchall():
-                       self.feeds.append(PlanetFeed(feed[0], feed[1], feed[2]))
+                       self.topposters.append(PlanetFeed(feed))
+               if len(self.topposters) < 2: self.topposters = []
+
+               c.execute("SELECT teams.name,teams.teamurl,NULL,count(*) FROM planet.teams INNER JOIN planet.feeds ON planet.feeds.team=planet.teams.id INNER JOIN planet.posts ON planet.feeds.id=planet.posts.feed WHERE age(dat) < '1 month' GROUP BY teams.name,teams.teamurl")
+               for feed in c.fetchall():
+                       self.topteams.append(PlanetFeed(feed))
+               if len(self.topteams) < 2: self.topteams = []
 
                rss.write_xml(open("www/rss20.xml","w"), encoding='utf-8')
                rssshort.write_xml(open("www/rss20_short.xml","w"), encoding='utf-8')
@@ -91,7 +98,8 @@ class Generator:
                tmpl = get_template(templatename)
                f = open(outputname, "w")
                f.write(tmpl.render(Context({
-                       'feeds': self.feeds,
+                       'topposters': self.topposters,
+                       'topteams': self.topteams,
                        'posts': self.items,
                })).encode('utf-8'))
                f.close()
index 3bbeefa5f52b760ea132e46e039dd22ca10a5457..3ba6002d8f0162c6e894ec6740ae71f12f838e79 100644 (file)
@@ -52,10 +52,11 @@ class PlanetPost:
        title = property(_get_title)
 
 class PlanetFeed:
-       def __init__(self,name,blogurl,feedurl):
-               self.name = name
-               self._blogurl = blogurl
-               self._feedurl = feedurl
+       def __init__(self,row):
+               self.name = row[0]
+               self._blogurl = row[1]
+               self._feedurl = row[2]
+               self.numposts = row[3]
 
        def _get_blogurl(self):
                return quoteurl(self._blogurl)
index 9a2f226369eb3586f4ff5959a26019f067f03f96..83d95edc844be5feebb3a565c8cd6f30ac4187d2 100644 (file)
@@ -1,12 +1,22 @@
 {% extends "base.tmpl" %}
 {% block content %}
     <div id="planetRight">
-     <div class="planetRightTitle">Subscriptions</div>
+{% if topposters %}
+     <div class="planetRightTitle">Top posters</div>
      <ul>
-{% for feed in feeds %}
-      <li><a href="{{feed.feedurl}}"><img src="img/feed-icon-14x14.png" alt="RSS"/></a> {%if feed.blogurl %}<a href="{{feed.blogurl}}">{{feed.name}}</a>{%else%}{{feed.name}}{%endif%}</li>
+{% for feed in topposters %}
+      <li><a href="{{feed.feedurl}}"><img src="img/feed-icon-14x14.png" alt="RSS"/></a> {%if feed.blogurl %}<a href="{{feed.blogurl}}">{{feed.name}}</a>{%else%}{{feed.name}}{%endif%} ({{feed.numposts}})</li>
 {% endfor %}
      </ul>
+{% endif %}
+{% if topteams %}
+     <div class="planetRightTitle">Top teams</div>
+     <ul>
+{% for feed in topteams %}
+      <li><a href="{{feed.feedurl}}"><img src="img/feed-icon-14x14.png" alt="RSS"/></a> {%if feed.blogurl %}<a href="{{feed.blogurl}}">{{feed.name}}</a>{%else%}{{feed.name}}{%endif%} ({{feed.numposts}})</li>
+{% endfor %}
+     </ul>
+{% endif %}
      <div class="planetRightTitle">Feeds</div>
      <ul>
       <li><a href="rss20.xml"><img src="img/feed-icon-14x14.png" alt="rss" /></a> <a href="rss20.xml">All feeds (full entries)</a></li>