feedgen
Python module to generate Atom feeds, RSS feeds, and podcasts
Repository Health
Technical Analysis
feedgen is a Python library for programmatically building syndication feeds. It generates standards-compliant Atom and RSS 2.0 feeds, and with its podcast extension it produces iTunes-compatible podcast feeds complete with episode metadata and enclosures.
You construct a feed object, set channel-level fields, add entries, and serialize the result to an XML string or file. A pluggable extension system layers in additional vocabularies such as iTunes podcast tags, Dublin Core metadata, syndication hints, and media RSS, so you can enrich feeds without leaving the same fluent API.
What You Get
- A FeedGenerator object that outputs both Atom and RSS 2.0 from the same model
- Entry objects for individual items with titles, links, authors, and content
- A podcast extension producing iTunes-compatible podcast feeds with enclosures
- Additional extensions for Dublin Core, syndication, and media RSS metadata
Common Use Cases
- Generating an RSS or Atom feed for a blog or news site
- Producing an iTunes-ready podcast feed from episode data
- Serializing feeds to a string for HTTP responses or to a file on disk
- Adding rich metadata to feeds via Dublin Core or media RSS extensions
Under The Hood
Architecture - The package models feeds as objects: feed.py defines FeedGenerator (channel-level data plus Atom/RSS serialization), entry.py defines FeedEntry for individual items, and an ext/ subpackage holds extension classes (podcast, Dublin Core, syndication, media) that register additional fields onto feeds and entries; XML is produced via lxml element trees. Tech Stack - Pure Python built on lxml for XML generation (per requirements.txt), packaged with setup.py/setup.cfg and distributed on PyPI as feedgen, with a compat.py shim for cross-version support and a version.py for versioning. Code Quality - The codebase is small, focused, and mature with a tests/ suite and documentation under doc/, though development activity is low and the project is largely in maintenance mode. API Design - The API is approachable: construct a generator, use getter/setter methods for each field, add_entry() for items, and atom_str()/rss_str()/file variants for output, with extensions loaded via load_extension(), all covered by clear README examples.