Tools for managing podcasting 2.0 feeds
Project description
pg-podcast-toolkit
Tools for parsing and managing Podcasting 2.0 RSS feeds with automatic namespace capture and database-ready output.
Features
- Podcasting 2.0 Support - Automatically captures all podcast:* namespace tags without parser updates
- Database-Ready Output - Built-in
to_db_record()methods for PostgreSQL schema alignment - Backward Compatible - Existing code continues to work, new features are opt-in
- Deterministic IDs - MD5-based UUID generation for podcasts and episodes
- GUID Fallback - Handles episodes with missing GUIDs gracefully
- Comprehensive Parsing - Supports RSS 2.0, iTunes extensions, and custom namespaces
Installation
pip install pg-podcast-toolkit
Quick Start
Basic Usage
from pg_podcast_toolkit import Podcast
import requests
# Fetch and parse a podcast feed
response = requests.get('https://example.com/feed.xml')
podcast = Podcast(response.content, feed_url='https://example.com/feed.xml')
# Access podcast metadata
print(podcast.title)
print(podcast.description)
print(podcast.itunes_image)
# Access episodes
for item in podcast.items:
print(f"{item.title} - {item.itunes_duration}s")
Database Integration (New in v0.2.0)
# Get database-ready podcast record
podcast_record = podcast.to_db_record(
etag='some-etag', # Optional HTTP ETag
last_modified='Wed, 06 Nov', # Optional Last-Modified header
last_fetched_at=1234567890 # Optional fetch timestamp
)
# Insert into PostgreSQL
# podcast_record matches schema: id, podcast_guid, title, feed_url,
# image_url, language, itunes_id, etag, last_modified, last_fetched_at,
# created_at, updated_at, extras (JSONB)
# Get database-ready episode records
for item in podcast.items:
episode_record = item.to_db_record(podcast_id=podcast_record['id'])
# episode_record matches schema: id, podcast_id, guid, title,
# description, image_url, publish_date, duration_seconds,
# episode_number, season_number, episode_type, explicit,
# enclosure_url, enclosure_type, enclosure_size,
# created_at, updated_at, extras (JSONB)
Accessing Podcasting 2.0 Namespaces (New in v0.2.0)
# All unknown namespace tags are automatically captured
print(podcast.namespaces)
# {
# 'podcast': {
# 'guid': {'value': '...'},
# 'locked': {'value': 'yes', 'attributes': {'owner': 'email@example.com'}},
# 'funding': {'value': 'Support!', 'attributes': {'url': 'https://...'}},
# 'person': [
# {'value': 'Host Name', 'attributes': {'role': 'host', 'img': '...'}},
# ...
# ]
# }
# }
# Episode-level namespaces
for item in podcast.items:
print(item.namespaces)
# {
# 'podcast': {
# 'chapters': {'attributes': {'url': '...', 'type': 'application/json'}},
# 'transcript': {'attributes': {'url': '...', 'type': 'text/srt'}},
# 'person': [...],
# ...
# }
# }
What's New in v0.2.0
- Automatic Namespace Capture - No parser updates needed for new Podcasting 2.0 tags
- Database-Ready Methods -
Podcast.to_db_record()andItem.to_db_record() - Schema Alignment - Output matches PostgreSQL schema with UUID primary keys
- GUID Fallback - Episodes without GUIDs use
enclosure_urlfor ID generation - 100% Backward Compatible - All existing attributes and methods unchanged
Supported Specifications
- RSS 2.0
- iTunes Podcast Extensions
- Podcasting 2.0 Namespace (automatic capture)
- Custom namespace extensions (automatic capture)
Development Status
This library is actively maintained and production-ready. The v0.2.0 release introduces database integration features while maintaining full backward compatibility.
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pg_podcast_toolkit-0.3.1.tar.gz.
File metadata
- Download URL: pg_podcast_toolkit-0.3.1.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ef1bd2abf060cbd6ba409404dbb3d5d3a474d124f3752dcb90c40e8c85eefef
|
|
| MD5 |
3fe3981b9bdeff11742ec88081aeafdc
|
|
| BLAKE2b-256 |
6146a2f8d4dab7eb7e32cb7b20c6ff31821ba5abd5621aa7ebd7fefb03cd43d9
|
File details
Details for the file pg_podcast_toolkit-0.3.1-py3-none-any.whl.
File metadata
- Download URL: pg_podcast_toolkit-0.3.1-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
874e25ec032d4ac78bb587caa66beac0228e446373211170b7b02219234b76e0
|
|
| MD5 |
6b01474bd83dbb54caa6839b9ec348b7
|
|
| BLAKE2b-256 |
c8de2aa95c7b5183bacc060560f0830878561bd8c7da78f4536fbf8821a3f089
|