X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=plugins%2Frss_feed.py;h=580d3040925ec0e07af77fd8af67eab82add60b4;hb=509ed07cacbbd56ade07db72f21915920760fc02;hp=71c54111bd786660143ed6d5ca0c98603ced7671;hpb=beefd7886d61f941afdd0041c109219327894119;p=webber.git diff --git a/plugins/rss_feed.py b/plugins/rss_feed.py index 71c5411..580d304 100644 --- a/plugins/rss_feed.py +++ b/plugins/rss_feed.py @@ -1,6 +1,6 @@ # -*- coding: iso-8859-1 -*- from webber import * -import os, datetime +import os, datetime, re try: import PyRSS2Gen except ImportError: @@ -8,6 +8,7 @@ except ImportError: raise items = [] +max_age = 0 @set_hook("checkconfig") @@ -15,10 +16,16 @@ def checkconfig(params): if not cfg.has_key("rss_file"): log('no "rss_file:" configured, using "feed.rss":', 4) cfg.rss_file = "feed.rss" + if not cfg.has_key("rss_max_items"): + cfg.rss_max_items = 0 + if cfg.has_key("rss_max_age_days"): + import time + global max_age + max_age = int(time.time()) - int(cfg.rss_max_age_days)*86400 +# Helper class needed for datetime.datetime to generate GMT timestamps ZERO = datetime.timedelta(0) - class UTC(datetime.tzinfo): """UTC""" @@ -38,6 +45,8 @@ def sitemap_scan(params): global items file = params.file + if max_age and file["mtime"] < max_age: + return if not file.has_key("linktitle"): return if file.has_key("change"): @@ -50,25 +59,49 @@ def sitemap_scan(params): 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), + pubDate = file["mtime"] ) items.append(item) - @set_hook("finish") def finish(params): + global items + # Sort items by pubDate, which still holds the mtime + items.sort(key=lambda i: i.pubDate, reverse=True) + + # Limit to requested number + count = int(cfg.rss_max_items) + if count: + items = items[:count] + + # convert mtime to real pupDate + for i in items: + i.pubDate = datetime.datetime.fromtimestamp(i.pubDate, utc) + 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('', '\n' % (cfg.main_url, cfg.rss_file)) + f.write(s[1:]) + f.write("\n")