import markdown import pathlib import os current_dir = pathlib.Path(__file__).parent extensions = ['meta', 'nl2br'] with (current_dir / "base_feed.xml").open("r") as f: base_feed = f.read() with (current_dir / "base_item.xml").open("r") as f: base_item = f.read() def convert_case(string: str): while string.find("_") != -1: string = string.replace("_" + string[string.index("_") + 1], string[string.index("_") +1].upper()) return string def convert_markdown_to_html(article_path: pathlib.Path): with (article_path / "article.md").open("r") as f: markdown_data = f.read() markdown_instance = markdown.Markdown(extensions=extensions) html = markdown_instance.convert(markdown_data) metadata = markdown_instance.Meta return html, metadata def article_to_xml(article_path: pathlib.Path): try: html, metadata = convert_markdown_to_html(article_path) except Exception as e: print(e) return "" tags = [f"<{convert_case(key)}>{metadata[key][0]}" for key in metadata.keys()] tags.append(f"\n{html}\n") return base_item.format(tags="\n".join(tags)) def make_rss_feed(path, channel_name, channel_link, description): article_paths = (pathlib.Path.cwd() / path).glob("[0-9]*") article_paths_sorted = sorted(article_paths, key=lambda x: x.name, reverse=True) articles = "".join([article_to_xml(path) for path in article_paths_sorted]) return base_feed \ .replace("{title}", channel_name) \ .replace("{link}", channel_link) \ .replace("{description}", description) \ .replace("{items}", articles)