Skip to content

Latest commit

 

History

History
590 lines (387 loc) · 16.3 KB

podcast-feed-best-practice.md

File metadata and controls

590 lines (387 loc) · 16.3 KB

gPodder Podcast Feed Best Practice

Document Status: very early draft

This document contains best practices for creating podcast feeds that should be consumed by podcasting clients. It aims to be a guideline for podcast publishers and systems creating podcast feeds on behalf of them, as well as for podcast clients need to interpret those feeds.

This document is published by the [gPodder team] gpodder but aims for general compatability among podcast applications.

Preface

RSS and Atom feeds are commonly used to distribute and describe podcasts. Due to their generic definition, they can be ambigously interpreted for the use case of podcasts. This often resulted in incompatible uses of these standards which then caused problems when processing some podcast feeds.

This document builds upon existing standards and established extensions, and gives recommendations how these standards should be put to use. It should not conflict with any standard that is mentioned.

Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

Overview

Terminology

A podcast is a type of digital media consisting of an episodic series of media files which are distributed through web syndication. A podcast is described by one or more podcast feeds (short feeds). A podcast contains any number of episodes, each of which is represented by zero or more media files.

Structure

The remainder of this document is divided into the following sections:

  • General Considerations discusses general topics related to the distribution of podcasts
  • Podcasts discusses pieces of information that describe a podcast
  • Feeds discusses more technical details of the feeds describing a podcast
  • Episodes discusses pieces of information that describe an episode
  • Media Files discusses more technical details of the mediate files that contain the actual content of an episode

General Considerations

TODO

Podcasts

One feed describes one podcast and its episodes. There MAY be multiple feeds describing different views of the same podcast (eg different media types, different number and or selection of episodes, etc). See section Related Feeds.

Contents

  • Title
  • GUID
  • Link
  • Description
  • Language
  • Update Frequency
  • Generator
  • Payment URL
  • Summary
  • Author
  • Image / Cover
  • Copyright and License
  • Categorization

Title

The name of the podcast. A feed MUST contain a title, and it must not be empty. It MAY contain additional classification of the feed (such as "MP3" or "HQ", etc..) if there are multiple feeds, but if such additional classification is added, it SHOULD be added to the end of the title. It SHOULD NOT contain special characters at the end / at the beginning. Avoid terms like "podcast", "feed", "episodes", etc.. in the title - it will be obvious (or irrelevant) to your users (exception: if "Podcast" is part of your show's name, it is okay to have it included in the title).

Paths:

  • Atom: /atom10:feed/atom10:title
  • RSS: /rss/channel/title
  • RSS (DC): /rss/channel/dc:title

Good:

  • All My Ponies
  • Opinion of Johnny
  • FLOSS Daily - HQ
  • Beyond the Usual (MP3)

Bad:

  • All Podcast Episodes
  • MP3 Feed
  • Podcast - High Quality
  • All Entries
  • HQ MP3 - FLOSS
  • Awesome Podcast <

  • [The Super Podcast]

GUID

A podcast feed SHOULD provide a globally unique Id (GUID).

TODOs

  • RSS?
  • Should the GUID represent the feed or the podcast?
  • Right now, we don't used the (feed-wide) GUID at all in gPodder

Paths

  • Atom /atom10:feed/atom10:id

Link

The URL of the podcast's website. The resource that is available through the specified URL should be accessible by a browser.

Paths:

  • Atom: /atom10:feed/atom10:link[@rel=”alternate”]/@href
  • Atom: /atom10:feed/atom10:link[not(@rel)]/@href
  • RSS: rss/channel/link

Description

A podcast MUST contain a textual description. The description MAY be formatted using Markdown. It is RECOMMENDED to provide a short and long version of the description. If there is only one description for the feed, the short description SHOULD NOT be used.

Paths (Short Descriptions)

  • Atom: /atom10:feed/atom10:subtitle
  • RSS (iTunes): /rss/channel/itunes:subtitle (see itunes:subtitle)

Paths (Long Description)

  • RSS: rss/channel/description
  • RSS (DC): /rss/channel/dc:description
  • RSS (iTunes): (see itunes:summary)

Tags and Categorization

Update Frequency

It is RECOMMENDED to providate information about the podcast's update frequency using the RDF Site Summary Syndication Module.

If a podcast is not longer updated with new episodes, it is RECOMMENDED to indicate this by using the <itunes:complete> element from the iTunes extensions.

Image / Cover

It is RECOMMENDED to provide an image or cover art for a podcast. The URL of the image MUST be provided. All other information is OPTIONAL.

Paths

  • Atom: /atom10:feed/atom10:logo
  • RSS: /rss/channel/image (see image)
  • RSS (iTunes): (see itunes:image)

TODOs

  • Atom image?
  • Atom: /atom10:feed/atom10:icon
  • Image requirements?
  • path of itunes:image

License

It is RECOMMENDED to provide a link to the license under which a podcast is published. If an RSS feed is available under a Creative Commons license, the creative commons namespace SHOULD be used.

Paths

  • Atom: /atom10:feed/atom10:link[@rel=”license”]/@href
  • RSS (CC): /rss/channel/creativeCommons:license

Language

A podcast feed SHOULD provide information about the primary language used in the podcast. The language should be specified according to RFC 3066, RFC 4647 and RFC 5646.

Paths

  • Atom: feed/@xml:lang
  • RSS (DC): /rss/channel/dc:language
  • RSS: /rss/channel/language

Payment URL

It is RECOMMENDED to include a payment URL into a podcast feed, so that listeners can support the creation of the podcast.

Services

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:link[@rel="payment"]

Generator

A podcast feed SHOULD include information about the program by which it was created. This MUST contain the name of the program, and SHOULD contain the version and an URI associated with the program.

Atom allows to provide this information in a structured format. In RSS one of the following notations SHOULD be used.

Paths

  • Atom: /atom10:feed/atom10:generator
  • RSS: /rss/channel/generator

Authors and Contributors

Podcast feeds SHOULD include information about the authors and contributors.

Atom and Dubline Core allow to include structured information about author and contributors. It is RECOMMENDED to include name and URI and an email address. When using the iTunes extension, it is RECOMMENDED to only specify the name of the author.

Author Paths:

  • Atom: /atom10:feed/atom10:author (see author and [person][rfc4287person])
  • RSS (DC): /rss/channel/dc:creator (see dc)
  • RSS (iTunes): /rss/channel/itunes:author (see author

Contributor Paths:

  • Atom /atom10:feed/atom10:contributor

  • RSS (DC): /rss/channel/dc:contributor

  • TODO: should the author be included in the contributors?

Feeds

Meta Data

  • TODO: Related feeds?
  • TODO: Self-reference? Canonical URL?
  • TODO: How to match uniquely identify an author among multiple feeds? Email?

Format

A podcast MUST be published in either RSS 2.0 or Atom 1.0.

  • TODO: Encoding? Always UTF-8? Defined in HTTP headers or in the content? iTunes requires UTF-8

Related Feeds

  • TODO: Reference all related feeds from every other feed, or reference one common resource that refers to all feeds; if so, which format?

Publication Date

A podcast feed SHOULD specify the date it was published. The publication date MUST conform to the RFC 2822 Date and Time Specification.

Paths

  • RSS: /rss/channel/pubDate

Update Date

A podcast feed SHOULD specify the date if was last updated. The update date MUST conform to the RFC 2822 Date and Time Specification.

Paths

  • Atom: /atom10:feed/atom10:updated

  • RSS (DC): /rss/channel/dc:date

  • TODO: if missing, use publication date / date of last episode / http header?

Publisher

A podcast feed SHOULD specify its publisher.

Paths

  • RSS (DC): /rss/channel/dc:publisher
  • RSS (iTunes): /rss/channel/itunes:owner

Availability

Each feed should have exactly one cannonical URL. A permanent redirect should be used to indicate that the feed has moved to a different URL. Clients are then instructed to updated the URL stored for the feed, and access the redirect target directly in the future.

PubSubHubbub

A podcast feed SHOULD be published through a PubSubHubbub hub.

Paths

  • Atom: /atom10:feed/atom10:link[@rel=”alternate”]/@href
  • RSS: /rss/channel/atom10:link[@rel=”alternate”]/@href (see info)

Episode

A feed should contain a list of episodes ordered by their modification date, starting with the one most recently modified.

Each episode describes one recording of a podcast's show.

  • TODO: number of episodes? either suggest a number or a time frame (eg at least one week of episodes)
  • TODO: alternative feeds with other selection of episodes
  • TODO: only include episodes for which the media files are still available?

Contents

  • GUID
  • Title
  • Link
  • Description
  • Duration
  • Publication Date
  • Payment URL
  • Comments

Author

Episodes SHOULD include information about the authors and contributors.

Atom and Dubline Core allow to include structured information about author and contributors. It is RECOMMENDED to include name and URI and an email address. When using the iTunes extension, it is RECOMMENDED to only specify the name of the author.

Author Paths:

  • Atom: /atom10:feed/atom10:entry/atom10:author
  • RSS (DC): /rss/channel/item/dc:author
  • RSS (iTunes): /rss/channel/itunes:author

Contributor Paths:

  • Atom: /atom10:feed/atom10:entry/atom10:contributor

  • RSS (DC): /rss/channel/item/dc:contributor

  • RSS (iTunes): /rss/channel/item/itunes:author (see author

  • TODO: should the author be included in the contributors?

Publisher

An episode SHOULD specify its publisher.

Paths

  • RSS (DC): /rss/item/dc:publisher
  • RSS (iTunes): /rss/item/itunes:owner

Sources / Show Notes

Sources and Show notes

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:source

GUID

The GUID uniquely identifies an episode. Two episode entries (possibly in two different feeds) that describe the same episode (possibly in different formats) MUST have the same GUID. Two episode entries that describe different episodes MUST NOT have the same GUID.

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:id
  • RSS: /rss/channel/item/guid

Title

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:title
  • RSS (DC): /rss/channel/item/dc:title
  • RSS: /rss/channel/item/title

Link

The URL of the episode's website. The resource that is available through the specified URL should be accessible by a browser.

Paths:

  • Atom: /atom10:feed/atom10:entry/atom10:link[@rel=”alternate”]/@href
  • Atom: /atom10:feed/atom10:entry/atom10:link[not(@rel)]/@href
  • RSS: /rss/channel/item/link

Description

An episode MUST contain a textual description. The description MAY be formatted using Markdown. It is RECOMMENDED to provide a short and long version of the description. If there is only one description for the feed, the short description SHOULD NOT be used.

Paths (Short Description)

  • Atom: /atom10:feed/atom10:entry/atom10:summary
  • RSS: /rss/channel/item/description
  • RSS: /rss/channel/item/dc:description

Paths (Long Description)

  • Atom: /atom10:feed/atom10:entry/atom10:content

  • RSS: /rss/channel/item/body

  • RSS: /rss/channel/item/content:encoded

  • RSS: /rss/channel/item/fullitem

  • RSS: /rss/channel/item/xhtml:body

  • TODO: check which RSS elements to use

License

It is RECOMMENDED to provide a link to the license under which an episode is published. If an episode in a RSS feed is available under a Creative Commons license, the creative commons namespace SHOULD be used.

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:link[@rel=”license”]/@href
  • RSS (CC): /rss/channel/item/creativeCommons:license

Update Date

An episode feed SHOULD specify the date if was last updated. The update date MUST conform to the RFC 2822 Date and Time Specification.

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:updated
  • RSS (DC): /rss/channel/item/dcterms:modified

Duration

TODO

Publication Date

The publication date MUST conform to the RFC 2822 Date and Time Specification.

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:published
  • RSS: /rss/channel/item/pubDate
  • RSS (DC): /rss/channel/item/dcterms:issues (see issued)

Payment URL

It is RECOMMENDED to include a payment URL into a podcast feed, so that listeners can support the creation of the podcast.

Services

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:link[@rel="payment"]

Comments

Tags and Categorization

Paths

  • Atom: /atom10:feed/atom10:entry/category
  • RSS: /rss/channel/item/category
  • RSS (DC): /rss/channel/item/dc:subject
  • RSS (iTunes): /rss/channel/item/itunes:category
  • RSS (iTunes): /rss/channel/item/itunes:keywords

Media Files (Enclosures)

Contents

  • Link
  • Media Type
  • File Size
  • Length

Open Questions

  • TODO: How to handle multiple formats?
  • TODO: Which audio/video formats are recommended? Is there a comprehensive/authoritative list of open source codecs?

For iTunes support refer to the audio and video formats recommended by Apple.

Paths

  • Atom: /atom10:feed/atom10:entry/atom10:link[@rel="enclosure"]
  • RSS: /rss/channel/item/enclosure

References

Authors