[Hejes-devel] [924] - blog/feed.rss: corrected URLs in feed; using custom feed generator (built-in is buggy); using RFC 2822 datetime format;

hejes-devel at nytud.hu hejes-devel at nytud.hu
Fri Sep 6 00:51:58 CEST 2013


Revision: 924
Author:   mihaltz
Date:     2013-09-06 00:51:58 +0200 (Fri, 06 Sep 2013)
Log Message:
-----------
- blog/feed.rss: corrected URLs in feed; using custom feed generator (built-in is buggy); using RFC 2822 datetime format; 
  killed HTML tags in description fields; validated feed with http://validator.w3.org/feed/check.cgi

Modified Paths:
--------------
    trunk/web2py/applications/helyesiras_webdev/controllers/blog.py
    trunk/web2py/applications/helyesiras_webdev/models/dbblog.py
    trunk/web2py/applications/helyesiras_webdev/progress.log

Added Paths:
-----------
    trunk/web2py/applications/helyesiras_webdev/views/blog/feed.rss

Modified: trunk/web2py/applications/helyesiras_webdev/controllers/blog.py
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/controllers/blog.py	2013-09-05 13:46:19 UTC (rev 923)
+++ trunk/web2py/applications/helyesiras_webdev/controllers/blog.py	2013-09-05 22:51:58 UTC (rev 924)
@@ -5,9 +5,11 @@
 @author MM
 """
 
+from email.Utils import formatdate
+from time import mktime
+import re
 from util import safeint
 
-
 def index():
   """Starting page for the blog.
      returns following keys:
@@ -79,18 +81,21 @@
   
 
 def feed():
-  """Return a dict that can be rendered by views/generic.rss as the RSS feed of the blog. URL is .../blog/feed.rss"""
+  """Return a dict that can be rendered by views/blog/feed.rss as the RSS feed of the blog. URL is http://<host_name>/<application_name>/blog/feed.rss.
+  Note: the builtin views/generic.rss could be used instead the custom views/blog/feed.rss, but at this time there's a (python) bug preventing it, see https://groups.google.com/forum/#!msg/web2py/8ZwVMKS69Sg/2ijXe2eKGBgJ
+  """
   entries = []
   posts = dbblog(dbblog.posts.category == dbblog.categories.id).select(orderby=~dbblog.posts.created_on, limitby=(0, 15))
   for row in posts:
     post = row.posts
-    entries.append(dict(title='Cim',# post.title,
-                        link=URL(c='blog', f='show', args=[post.slug], host=True),
-                        description='Leiras', #MARKMIN(post.body.split('\n')[0]).xml(),
-                        created_on=str(post.created_on) 
+    entries.append(dict(title=post.title,
+                        link=URL(c='blog', f='show', args=[post.slug], host=True, extension=''),
+                        description=re.sub('<[^<>]+>', '', MARKMIN(post.body.split('\n')[0]).xml()),
+                        created_on=formatdate(mktime(post.created_on.timetuple()), localtime=True)
                         ))
-  return dict(title="Helyesiras.mta.hu blog",
-              link="http://helyesiras.mta.hu/helyesiras/blog",
-              description="A helyesiras.mta.hu oldal hivatalos blogja",
+  return dict(title=u"Helyesiras.mta.hu blog",
+              link=u"http://helyesiras.mta.hu/helyesiras/blog",
+              description=u"A helyesiras.mta.hu oldal hivatalos blogja",
+              created_on=formatdate(mktime(request.now.timetuple()), localtime=True),
               entries=entries)
 

Modified: trunk/web2py/applications/helyesiras_webdev/models/dbblog.py
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/models/dbblog.py	2013-09-05 13:46:19 UTC (rev 923)
+++ trunk/web2py/applications/helyesiras_webdev/models/dbblog.py	2013-09-05 22:51:58 UTC (rev 924)
@@ -5,7 +5,6 @@
 @author: MM
 """
 
-
 def create_index_if_not_exists(db, table, keyname, column, unique=False):
   """Check if index keyname on db.table.column exists.
      If not, execute sql statement 'CREATE (UNIQUE) INDEX...' and return True, otherwise return False.

Modified: trunk/web2py/applications/helyesiras_webdev/progress.log
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/progress.log	2013-09-05 13:46:19 UTC (rev 923)
+++ trunk/web2py/applications/helyesiras_webdev/progress.log	2013-09-05 22:51:58 UTC (rev 924)
@@ -778,3 +778,5 @@
 [2013-08-29 12:52:56] EDIT helyesiras_webdev/controllers/blog.py: 0
 [2013-08-29 12:53:58] EDIT helyesiras_webdev/controllers/blog.py: 0
 [2013-08-29 13:00:38] EDIT helyesiras_webdev/controllers/blog.py: 0
+[2013-09-05 21:58:44] CREATE blog/feed.rss: 0
+[2013-09-05 21:58:51] EDIT helyesiras_webdev/views/blog/feed.rss: 0

Added: trunk/web2py/applications/helyesiras_webdev/views/blog/feed.rss
===================================================================
--- trunk/web2py/applications/helyesiras_webdev/views/blog/feed.rss	                        (rev 0)
+++ trunk/web2py/applications/helyesiras_webdev/views/blog/feed.rss	2013-09-05 22:51:58 UTC (rev 924)
@@ -0,0 +1,27 @@
+{{
+def toutf8(s):
+  if isinstance(s, unicode):
+    return s.encode('utf8', 'replace')
+  return s
+pass
+}}
+{{
+
+# Note: generic.rss should take care of everything, but it's buggy :(
+# See https://groups.google.com/forum/#!msg/web2py/8ZwVMKS69Sg/2ijXe2eKGBgJ
+
+response.headers['Content-Type'] = 'application/rss+xml; charset=UTF-8'
+
+response.write('<?xml version="1.0" encoding="utf-8"?>\n', escape=False)
+response.write('<rss version="2.0"><channel><title>{0}</title><link>{1}</link><description>{2}</description><lastBuildDate>{3}</lastBuildDate>\n'.format( response._vars.get('title', '(notitle)'), response._vars.get('link', ''), response._vars.get('description', '(nodescription)'), response._vars.get('created_on', '')), escape=False)
+response.write('<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n', escape=False)
+
+for item in response._vars.get('entries', []):
+  data = (item.get('title', '(notitle)'), item.get('link', ''), item.get('description', '(nodescription)'), item.get('created_on', ''))
+  data2 = [toutf8(x) for x in data]
+  response.write('<item><title>{0}</title><link>{1}</link><description>{2}</description><pubDate>{3}</pubDate></item>\n'.format(*data2), escape=False)
+pass
+
+response.write('</channel></rss>', escape=False)
+}}
+




More information about the Hejes-devel mailing list