phanan/poddle
A Laravel package for publishing podcasts: define episodes as Eloquent models and Poddle generates valid, iTunes-compatible RSS feeds with episode metadata, artwork, and enclosures—no hand-writing XML required.
composer require phanan/poddle
Start by opening the package's src/ directory and tests/ fixtures. The entry point is a small factory that turns a feed URL or a raw XML string into a typed Podcast object; the test fixtures are real-world PSP-1 feeds and are the fastest way to see exactly which tags (podcast:transcript, podcast:chapters, podcast:person, etc.) are mapped. Confirm the factory/method names against the README for your installed version before wiring them in.
First use case: pull a feed and enumerate episodes with their enclosure URLs and durations.
use PhanAn\Poddle\Poddle;
$podcast = Poddle::fromUrl('https://feeds.example.com/show.xml');
foreach ($podcast->episodes() as $episode) {
echo $episode->title.' — '.$episode->enclosure->url.PHP_EOL;
}
If your app already fetches HTTP elsewhere, pass the body instead: Poddle::fromString($xml).
SyncPodcastFeed job parses the feed, then upserts episodes keyed on the GUID (<guid> or podcast:guid) so re-runs are idempotent. Fall back to enclosure URL when no GUID exists.podcast:transcript, podcast:chapters, podcast:funding, podcast:person) to power richer UIs; generic RSS readers silently drop these.tidy/DOMDocument first, or catch and log with the feed URL and the first ~500 characters.podcast: vs psc: for the Podcast Standards Project). Don't regex-match prefixes—rely on namespace-aware parsing (SimpleXMLElement::children($ns)).Accept: application/rss+xml. Set a UA, follow redirects, cap response size.itunes:duration is inconsistent: HH:MM:SS, MM:SS, or raw seconds. Normalize to an integer column before persisting.pubDate yourself.podcast:locked before allowing edits to feed metadata (relevant if you also publish feeds).How can I help you explore Laravel packages today?