In order to create my Blogroll automatically, I needed to convert the OPML export from Miniflux to markdown. While RSS-OPML-to-Markdown was a good start, I didn’t like the table output and the fact I couldn’t access htmlUrl data attributes.

This python script outputs a tag-separated list of feeds, linked with that htmlUrl rather than the rss feed itself. Passing tags to –ignore will omit them from the output.

pip3 install opml argparse
python ./ --opmlFile ~/Downloads/feeds\(2\).opml --markdownFile --ignore All Private Newsletter
import opml
import argparse

def opml_to_markdown(opml_file, ignore_tags):
    outline = opml.parse(opml_file)
    markdown = ""

    for tag in outline:
        if tag.text in ignore_tags:
        markdown += "\n## {}\n\n".format(tag.text)
        for feed in tag:
            markdown += "* [{}]({})\n".format(feed.title, feed.htmlUrl)
    return markdown

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--opmlFile', required=True)
    parser.add_argument('--markdownFile', nargs='?')
    parser.add_argument('--ignore', nargs='+')
    args = parser.parse_args()

    markdown = opml_to_markdown(args.opmlFile, args.ignore)

    if args.markdownFile:
        with open(args.markdownFile, 'wt', encoding="utf-8") as f: