Source code for pyquickhelper.sphinxext.build_rss

# coding:utf-8
"""
Buid the RSS stream.


:githublink:`%|py|6`
"""
import datetime
import os
from xml.sax.saxutils import escape

modelForARSSFeed = """<rss version="2.0">
                        <channel>
                            <title>{0.blogtitle}</title>
                            <link>{0.root}/blog/main_0000.html</link>
                            <description>{0.description}</description>
                            """.replace("                        ", "")

modelForARSSRow = """<item>
            <title>{0.title}</title>
            <link>{0.root}/blog/{0.year}/{0.name}.html</link>
            <guid isPermaLink="true">{0.root}/blog/{0.year}/{0.name}.html</guid>
            <description>{0.decription}</description>
            <pubDate>{0.date}</pubDate>
        </item>"""

modelForARSSChannel = """\n</channel>\n</rss>\n"""


[docs]def build_rss(posts, blog_title="__BLOG_TITLE__", blog_root="__BLOG_ROOT__", blog_description="__BLOG_DESCRIPTION__", now=datetime.datetime.now(), model_feed=modelForARSSFeed, model_row=modelForARSSRow, model_channel=modelForARSSChannel): """ Build a RSS file, the function keeps the blog post (HTML format) from the last month. The summary will only contains the part included in those two comments. :param posts: list of posts to include :param blog_title: title of the blog :param blog_description: description of the blog :param blog_root: url root :param now: date to use as a final date, only blog post between one month now and now will be kept :param model_feed: see model_channel :param model_row: see model_row :param model_channel: the part related to a post in the rss stream is composed by the concatenation of the three stream: *model_feed*, *model_row*, *model_channel*. You should see the default value to see how you can replace them. :return: 2-uple: content of the file :githublink:`%|py|52` """ class EmptyClass: pass obj = EmptyClass() obj.blogtitle = blog_title obj.root = blog_root obj.description = blog_description rows = ["<?xml version=\"1.0\" encoding=\"utf-8\"?>"] rows.append(modelForARSSFeed.format(obj)) for post in posts: obj = EmptyClass() obj.title = escape(post.Title) obj.date = post.Date obj.year = post.Date[:4] obj.name = escape( os.path.splitext(os.path.split(post.FileName)[-1])[0]) obj.decription = escape("\n".join(post.Content)) obj.root = blog_root row = modelForARSSRow.format(obj) rows.append(row) rows.append(modelForARSSChannel) content = "\n".join(rows) return content