Skip to main content

Blogroll

These are my regular blog readings, sorted by category. It's a long list so it's hidden behind a detail block.

Expand list of blogs I read

Authors​

Baltimore​

Black​

Community​

Dev​

Education​

Fearless​

Flashlight​

Freemasonry​

Health​

IRL​

Law​

Library​

Marketing​

Me​

OSINT​

Pennsylvania​

Policy​

Politics​

Productivity​

Programming​

Science​

Security​

Shopping​

Social Media​

Software​

Stuff​

Tech​

Travel​

US News​

Writing​

Generation​

Generated with the following code from a Feedly OMPL download, constructed by ChatGPT

import xml.etree.ElementTree as ET

def parse_opml_to_markdown(input_file_path, output_file_path):
# Parse the OPML file
tree = ET.parse(input_file_path)
root = tree.getroot()

# Check if there are any categories or just a flat list of feeds
body_element = root.find('body')
category_element = body_element.find('outline')

# Initialize markdown content
markdown_content = ""

if category_element is None:
# Flat list of feeds, no categories
feeds = [
(feed.get('title', feed.get('text')), feed.get('htmlUrl'))
for feed in body_element.findall('outline')
if feed.get('htmlUrl') is not None
]
for feed_title, feed_link in feeds:
markdown_content += f"- [{feed_title}]({feed_link})\n"
else:
# Categories exist, handle similar to the previous file
categories = []
for category in body_element.findall('outline'):
category_title = category.get('title', category.get('text'))
feeds = [
(feed.get('title', feed.get('text')), feed.get('htmlUrl'))
for feed in category.findall('outline')
if feed.get('htmlUrl') is not None
]
if feeds:
categories.append((category_title, feeds))

# Sort categories alphabetically
categories.sort(key=lambda x: x[0])

for category_title, feeds in categories:
markdown_content += f"## {category_title}\n\n"
for feed_title, feed_link in feeds:
markdown_content += f"- [{feed_title}]({feed_link})\n"
markdown_content += "\n"

# Save the markdown content to a file
with open(output_file_path, 'w') as markdown_file:
markdown_file.write(markdown_content)

# Example usage:
input_file = 'subscriptions.opml'
output_file = 'subscriptions.md'
parse_opml_to_markdown(input_file, output_file)