# -*- coding: iso-8859-1 -*-
from webber import *
-import os, datetime
+import os, datetime, re
try:
import PyRSS2Gen
except ImportError:
cfg.rss_file = "feed.rss"
+# Helper class needed for datetime.datetime to generate GMT timestamps
ZERO = datetime.timedelta(0)
-
class UTC(datetime.tzinfo):
"""UTC"""
item = PyRSS2Gen.RSSItem(
title = file["title"],
link = full_url,
- guid = PyRSS2Gen.Guid("%s %s" % (full_url, file["mtime"])),
+ guid = PyRSS2Gen.Guid("%s %s" % (full_url, file["mtime"]), isPermaLink=0),
description = change,
pubDate = datetime.datetime.fromtimestamp(file["mtime"], utc),
)
items.append(item)
-
@set_hook("finish")
def finish(params):
rss = PyRSS2Gen.RSS2(
title = cfg.subtitle,
link = "http://%s" % cfg.main_url,
description = cfg.subtitle,
- lastBuildDate = datetime.datetime.now(),
+ lastBuildDate = datetime.datetime.now(utc),
items = items,
)
+ # Step one of self-reference
+ # (see http://feedvalidator.org/docs/warning/MissingAtomSelfLink.html)
+ rss.rss_attrs["xmlns:atom"] = "http://www.w3.org/2005/Atom"
+
try:
os.makedirs(cfg.out_dir)
except:
pass
- rss.write_xml( open(os.path.join(cfg.out_dir, cfg.rss_file), "w"))
+ f = open(os.path.join(cfg.out_dir, cfg.rss_file), "w")
+ # Ugly XML beautification
+ s = rss.to_xml()
+ s = re.sub("<(?!/)", "\n<", s)
+ s = s.replace("\n\n", "\n")
+ # Step two of self-reference
+ s = s.replace('<channel>', '<channel>\n<atom:link href="http://%s/%s" rel="self" type="application/rss+xml" />' % (cfg.main_url, cfg.rss_file))
+ f.write(s[1:])
+ f.write("\n")