Skip to main content

Convert podcast metadata from YAML to RSS 2.0 feeds compatible with Apple Podcasts, Spotify, and major podcast platforms.

Project description

๐ŸŽ™๏ธ YAML to RSS Automation ย |ย  ๐Ÿ“ก iTunes Compatible ย |ย  โœจ Multi-Episode Support


๐ŸŽ™๏ธ Podcast RSS Generator

A lightweight Python tool that transforms podcast metadata from YAML into production-ready RSS feeds compatible with all major podcast platforms: Apple Podcasts, Spotify, Google Podcasts, and more.

Write your podcast config once in human-readable YAML. Generate standards-compliant RSS feeds instantly. Deploy to any podcast directory.


๐Ÿง  What This System Does

feed.yaml (Your Podcast Config)
        โ†“
podcast-rss-generator (CLI Tool)
        โ†“
podcast.xml (RSS Feed)
        โ†“
โœ” Apple Podcasts
โœ” Spotify
โœ” Google Podcasts
โœ” Any RSS Reader
โœ” Your Website

No more manual XML editing. No more broken podcast feeds. Just YAML + Python + RSS.


โš™๏ธ Key Features

โœ” Simple YAML Configuration - Human-readable podcast & episode metadata
โœ” RSS 2.0 Standard - Full compliance with podcast specifications
โœ” iTunes Integration - Category, artwork, duration, and author metadata
โœ” Multi-Episode Support - Unlimited episodes with audio file management
โœ” Dynamic URLs - Configurable base URL for all asset links
โœ” UTF-8 Encoding - Proper character encoding for international characters
โœ” Version Control Friendly - Keep your feed in git, track every change


๐Ÿ—‚๏ธ Project Structure

podcast-test/
โ”œโ”€โ”€ podcast_rss_generator/      # ๐Ÿ“ฆ Main package
โ”‚   โ”œโ”€โ”€ __init__.py             # Package exports & version
โ”‚   โ”œโ”€โ”€ generator.py            # Core RSS generation engine
โ”‚   โ””โ”€โ”€ cli.py                  # Command-line interface
โ”‚
โ”œโ”€โ”€ tests/                      # ๐Ÿงช Test suite
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ conftest.py
โ”‚
โ”œโ”€โ”€ feed.yaml                   # ๐Ÿ“‹ Example config (you edit this)
โ”œโ”€โ”€ podcast.xml                 # ๐Ÿ“ก Generated RSS feed (output)
โ”‚
โ”œโ”€โ”€ pyproject.toml              # ๐Ÿ”ง Modern package config (PEP 517/518)
โ”œโ”€โ”€ setup.py                    # ๐Ÿ”ง Traditional setup config
โ”œโ”€โ”€ MANIFEST.in                 # ๐Ÿ“ฆ File inclusion rules
โ”œโ”€โ”€ requirements.txt            # ๐Ÿ“ฆ Production dependencies
โ”œโ”€โ”€ requirements-dev.txt        # ๐Ÿ› ๏ธ Development dependencies
โ”‚
โ”œโ”€โ”€ README.md                   # ๐Ÿ“– This file
โ”œโ”€โ”€ INSTALLATION.md             # ๐Ÿ’พ Installation guide
โ”œโ”€โ”€ PACKAGE_DESCRIPTION.md      # ๐Ÿ“ Full package overview
โ”œโ”€โ”€ PYPI_PUBLISHING_GUIDE.md    # ๐Ÿš€ How to publish to PyPI
โ”œโ”€โ”€ PROJECT_SUMMARY.md          # ๐ŸŽฏ Enhancement summary
โ”œโ”€โ”€ LICENSE                     # ๐Ÿ“„ MIT License

๐Ÿ“ฅ Installation

Option 1: Install from PyPI (Recommended)

pip install podcast-rss-generator

Then use the CLI:

podcast-rss-generator --input feed.yaml --output podcast.xml

Option 2: Install from Source

git clone https://github.com/saitejabandaru-in/podcast-test.git
cd podcast-test
pip install -e .

Option 3: Run Locally

pip install pyyaml
python feed.py

๐Ÿ’ป Usage

Command Line Interface

# Using default filenames (feed.yaml โ†’ podcast.xml)
podcast-rss-generator

# Custom input/output
podcast-rss-generator --input my-podcast.yaml --output my-feed.xml

# Show help
podcast-rss-generator --help

# Show version
podcast-rss-generator --version

Python API

from podcast_rss_generator import generate_rss_feed

# Generate RSS feed from YAML
output_path = generate_rss_feed("feed.yaml", "podcast.xml")
print(f"โœ… Feed generated: {output_path}")

๐Ÿ“ Configuration Guide

Podcast Metadata (Top Level)

title: Your Podcast Title              # Display name
subtitle: Your Tagline                 # Short description (1-2 lines)
author: Your Name                      # Podcast host/creator
description: Full description          # Complete podcast description
link: https://example.com              # Base URL (prepended to all paths)
image: /images/artwork.jpg             # Podcast artwork path
language: en-us                        # Language code (en-us, es-es, etc.)
category: Technology                   # iTunes category
format: audio/mpeg                     # Audio format (usually audio/mpeg)

Episodes Section

Add episodes to the item array. Each episode needs:

item:
  - title: "Episode Title"                           # Display name
    description: "What this episode is about"        # Episode description
    published: "Thu, 12 Jan 2023 18:00:00 GMT"       # RFC 2822 format
    file: /audio/episode.mp3                         # Audio file path (relative to link)
    duration: "00:45:30"                             # Length in HH:MM:SS
    length: 54567123                                 # File size in bytes

Publication Date Format: Must follow RFC 2822 (e.g., Thu, 12 Jan 2023 18:00:00 GMT)


๐Ÿ”„ Workflow

Step 1: Edit Configuration

Edit feed.yaml with your podcast details and episodes:

nano feed.yaml
# or use VSCode, Sublime, or your favorite editor

Step 2: Generate Feed

Use the CLI command:

podcast-rss-generator --input feed.yaml --output podcast.xml

Or use the Python API:

from podcast_rss_generator import generate_rss_feed
generate_rss_feed("feed.yaml", "podcast.xml")

Step 3: Deploy

Upload podcast.xml to your web server and submit the feed URL to podcast platforms:

  • Apple Podcasts
  • Spotify
  • Google Podcasts
  • All RSS directory services

๐Ÿ’ก Usage Examples

Example 1: Adding a New Episode

  - title: "EP06-New Topic"
    description: "Deep dive into the latest trends"
    published: "Thu, 16 Feb 2023 18:00:00 GMT"
    file: /audio/TFIT06.mp3
    duration: "00:35:00"
    length: 42000000

Then run:

podcast-rss-generator

Example 2: Updating Podcast Title

title: "The Future in Tech - Season 2"
subtitle: "Advanced Topics & Expert Interviews"

Re-run the generator โ†’ all episodes inherit new metadata.

Example 3: Changing the Base URL

link: https://mynewsite.com

All episode audio paths automatically prepend the new URL:

  • /audio/ep1.mp3 โ†’ https://mynewsite.com/audio/ep1.mp3

๐Ÿ“ˆ What This Project Demonstrates

โœ” Professional Python package structure (PEP 517/518)
โœ” CLI development with argparse
โœ” YAML configuration management
โœ” XML generation from structured data
โœ” RSS/podcast standards knowledge
โœ” iTunes integration and compatibility
โœ” Clean, modular Python scripting
โœ” Version-controlled podcast distribution
โœ” PyPI package publishing


๐Ÿงช Tech Stack

  • Python: 3.6+
  • Runtime: PyYAML, xml.etree.ElementTree (stdlib)
  • Development: setuptools, pytest, black, flake8, twine

๐Ÿ“‹ Requirements

  • Python: 3.6 or higher
  • Dependencies: pyyaml (auto-installed with package)
  • Workflow: YAML config file + valid podcast metadata
  • Hosting: Audio files accessible from your base URL

๐Ÿ“š Documentation

Document Purpose
README.md Main guide & examples (this file)
INSTALLATION.md Setup instructions
PACKAGE_DESCRIPTION.md Full package overview
PYPI_PUBLISHING_GUIDE.md How to publish to PyPI
PROJECT_SUMMARY.md What was improved

๏ฟฝ Workflow Tips

  1. Version Control - Keep feed.yaml in git, track all episode changes
  2. Validate Feed - Use podtrac.com or podbase.io to validate
  3. Host the XML - Upload podcast.xml to your web server
  4. Submit URLs - Most platforms accept your feed URL (e.g., https://yourdomain.com/podcast.xml)
  5. Update Regularly - Edit feed.yaml, run podcast-rss-generator, redeploy
  6. Test Locally - Keep multiple copies for testing different configurations

๐Ÿ‘จโ€๐Ÿ’ป Author

Sai Teja Bandaru
Data Scientist & Open Source Developer

๐ŸŒ https://www.saitejabandaru.com/


๐Ÿ“„ License

MIT License โ€” see LICENSE for details.


โญ Support

If you find this useful:

โญ Star the repo โ€” helps others discover it
๐Ÿด Fork it โ€” build on it for your use case
๐Ÿ› Report issues โ€” help improve the tool


Building automation-driven workflows for content creators.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

podcast_rss_generator-1.0.0.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

podcast_rss_generator-1.0.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file podcast_rss_generator-1.0.0.tar.gz.

File metadata

  • Download URL: podcast_rss_generator-1.0.0.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for podcast_rss_generator-1.0.0.tar.gz
Algorithm Hash digest
SHA256 747b98dbb46117658b219893c6fe04a58e40d823f37838c30bf98a8dc6f9c6a2
MD5 00a3aecb24fc643b54291a87c96323a4
BLAKE2b-256 9bd6e1280260f2f16f1939a59c708cddf3057471108d3c2f2e3d77eaeab98c5c

See more details on using hashes here.

File details

Details for the file podcast_rss_generator-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for podcast_rss_generator-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7226d38abdef177df855a0a67233eefbfb6b4e24ff5a5cca808fe0a57b8def75
MD5 873908227b80368810d744f928f514e0
BLAKE2b-256 0e21109422a49acaf2b25ad0d2d141267ad00575c0228b9281f48e11bd977eb2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page