Source code for pyrsslocal.cli.merge_rss
"""
Manipulate :epkg:`RSS` streams.
:githublink:`%|py|5`
"""
import os
from ..rss.rss_helper import enumerate_rss_merge, to_rss, to_html
[docs]def compile_rss_blogs(links, url, description,
template=None, title="BLOG",
author="AUTHOR", keywords="blog,python",
out_html="index.html", out_rss="rssfile.xml",
validate=None, fLOG=print):
"""
Compiles multiple blogs in one single blog. Uses
:epkg:`RSS` files.
:param links: list of urls of blogs to merge
:param url: publishing url
:param description: description of the aggregation
:param title: title of the aggregation
:param author: author of the aggregation
:param keywords: keywords for the blog post
:param template: change the template for the blog aggregation
:param out_html: output :epkg:`HTML`
:param out_rss: output :epkg:`RSS`
:param validate: None or a function to validate a blog post,
``validate(blog: BlogPost) -> bool``
:param fLOG: logging function
:githublink:`%|py|30`
"""
collect = []
for i, blog in enumerate(
enumerate_rss_merge(
links, title=title, min_size=None)):
fLOG("[compile_rss_blogs] reading blog {0}: {1} - '{2}'".format(
i, blog.pubDate, blog.link))
if validate in (None, '') or validate(blog):
collect.append(blog)
fLOG("[compile_rss_blogs] create '{0}'".format(out_rss))
rss = to_rss(collect, url, description)
with open(out_rss, "w", encoding="utf-8") as f:
f.write(rss)
fLOG("[compile_rss_blogs] create '{0}'".format(out_html))
html = to_html(collect, template=template, title=title,
author=author, keywords=keywords,
header=description, rssfile=os.path.split(out_rss)[-1])
with open(out_html, "w", encoding="utf-8") as f:
f.write(html)