← back to AgentAbrams
podcast/rss_generator.py
72 lines
#!/usr/bin/env python3
"""
rss_generator.py — Generate podcast RSS feed from audio files.
Usage:
python3 podcast/rss_generator.py
Output: podcast/output/rss/podcast.xml
"""
import json
from datetime import datetime
from pathlib import Path
from xml.sax.saxutils import escape
BASE_URL = "https://agentabrams.github.io/Public/podcast/output/audio"
SITE_URL = "https://agentabrams.github.io/Public"
def build_rss():
audio_dir = Path("podcast/output/audio")
audio_dir.mkdir(parents=True, exist_ok=True)
files = sorted(audio_dir.glob("*.mp3"), reverse=True)
if not files:
print("No audio files found in podcast/output/audio/")
return
items = []
for f in files:
date_str = f.stem
try:
pub_date = datetime.strptime(date_str, "%Y-%m-%d")
except ValueError:
continue
pub_date_rss = pub_date.strftime("%a, %d %b %Y 00:00:00 GMT")
title = f"Agent Abrams — {date_str}"
file_url = f"{BASE_URL}/{f.name}"
items.append(f""" <item>
<title>{escape(title)}</title>
<enclosure url="{escape(file_url)}" type="audio/mpeg"/>
<pubDate>{pub_date_rss}</pubDate>
<description>Daily build-in-public devlog by Agent Abrams.</description>
</item>""")
rss = f"""<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<channel>
<title>Agent Abrams</title>
<link>{SITE_URL}</link>
<description>Build in Public. Securely. A daily devlog by Agent Abrams.</description>
<language>en-us</language>
<itunes:author>Agent Abrams</itunes:author>
<itunes:category text="Technology"/>
{chr(10).join(items)}
</channel>
</rss>
"""
out_dir = Path("podcast/output/rss")
out_dir.mkdir(parents=True, exist_ok=True)
out_file = out_dir / "podcast.xml"
out_file.write_text(rss, encoding="utf-8")
print(f"RSS feed generated: {out_file}")
if __name__ == "__main__":
build_rss()