

1·
14 days agoIf you’re on Linux/macOS, a one-liner with xmllint or even plain Python handles this cleanly:
import xml.etree.ElementTree as ET
files = ["feeds1.opml", "feeds2.opml", "feeds3.opml"]
seen = set()
base = ET.parse(files[0]).getroot()
body = base.find("body")
for f in files[1:]:
for outline in ET.parse(f).iter("outline"):
url = outline.get("xmlUrl")
if url and url not in seen:
seen.add(url)
body.append(outline)
# Seed the base with already-existing URLs
for o in ET.parse(files[0]).iter("outline"):
seen.add(o.get("xmlUrl", ""))
ET.ElementTree(base).write("merged.opml")
Run it, done — deduplication is handled by xmlUrl.
Journalists and threat intelligence analysts are probably the top two, but the full list is longer than most people expect:
Honestly, the common thread is: anyone whose job requires staying current across many sources simultaneously. RSS is just a better alert system than email newsletters or social algorithms — it doesn’t bury, reorder, or monetize your feed.
The real tragedy is that most of these professionals don’t even know RSS is still alive and thriving. Half the evangelism job is just telling people it exists.