Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
daveajones committed Oct 20, 2023
2 parents 58fc441 + b9d7dd1 commit 4ab4157
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 42 deletions.
2 changes: 2 additions & 0 deletions contributors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,6 @@ Dave Keeshan
Steven Bell
@dergigi
CTHTC
@kenCode
@Agorise
... add your name as you contribute!
58 changes: 19 additions & 39 deletions docs/1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,8 @@ link. Please do not exceed `128 characters` for the node value or it may be tru
<br><br><br><br><!-- Tag block -->
## Chapters
`<podcast:chapters>`<br><br>
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md]
(https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md) file for a description of
the chapter file syntax. And, see the [example.json](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md) file for a description of
the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.

Benefits with this approach are that chapters do not require altering audio files, and the chapters can be edited
after publishing, since they are a separate file that can be requested on playback (or cached with download). JSON
Expand Down Expand Up @@ -207,8 +205,7 @@ requiring no additional work for the publisher.
`<podcast:soundbite>`<br><br>
Points to one or more soundbites within a podcast episode. The intended use includes episodes previews,
discoverability, audiogram generation, episode highlights, etc. It should be assumed that the audio/video source of
the soundbite is the audio/video given in the item's [`<enclosure>`](https://cyber.harvard.edu/rss/rss.
html#ltenclosuregtSubelementOfLtitemgt) element.
the soundbite is the audio/video given in the item's [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) element.

### Parent
&nbsp; `<item>`
Expand Down Expand Up @@ -292,8 +289,7 @@ characters` for the node value or it may be truncated by aggregators.
If `group` is not present, then "cast" is assumed.
- **img:** (optional) This is the url of a picture or avatar of the person.
- **href:** (optional) The url to a relevant resource of information about the person, such as a homepage or
third-party profile platform. Please see the [example feed](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/example.xml) for possible choices of what to use here.
third-party profile platform. Please see the [example feed](https://github.com/Podcastindex-org/podcast-namespace/blob/main/example.xml) for possible choices of what to use here.

The `role` and `group` attributes are case-insensitive. So, "Host" is the same as "host", and "Cover Art Designer"
is the same as "cover art designer".
Expand Down Expand Up @@ -363,7 +359,7 @@ verbiage (i.e. "Austin, TX"), but it shouldn't be depended on to be parseable in
cannot be blank. Please do not exceed `128 characters` for the node value or it may be truncated by aggregators.

### Attributes
- **geo:** (recommended) This is a latitude and longitude given in "geo" notation (i.e. "geo:30.2672,97.7431").
- **geo:** (recommended) This is a latitude and longitude given in ["geo" notation](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md#geo-recommended) (i.e. "geo:30.2672,97.7431").
- **osm:** (recommended) The Open Street Map identifier of this place, given using the OSM notation (i.e. "R113314")

### Examples
Expand Down Expand Up @@ -531,8 +527,7 @@ later be matched up with a `<podcast:season>4<podcast:season>` tag when it is pu
`<podcast:license>`<br><br>
This element defines a license that is applied to the audio/video content of a single episode, or the audio/video of
the podcast as a whole. Custom licenses must always include a url attribute. Implementors are encouraged to read
the license tag companion [document](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/license/license.md) for a more complete picture of
the license tag companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/license/license.md) for a more complete picture of
what this tag is intended to accomplish.

### Parent
Expand All @@ -542,8 +537,7 @@ what this tag is intended to accomplish.
&nbsp; Single

### Node Value
&nbsp; The node value must be a lower-cased reference to a license "identifier" defined in the [SPDX License List]
(https://spdx.org/licenses/) file if the license being used is a well-known, public license. Or, if it is a custom
&nbsp; The node value must be a lower-cased reference to a license "identifier" defined in the [SPDX License List](https://spdx.org/licenses/) file if the license being used is a well-known, public license. Or, if it is a custom
license, it must be a free form abbreviation of the name of the license as you reference it publicly. Please do not
exceed `128 characters` for the node value or it may be truncated by aggregators.

Expand All @@ -565,14 +559,12 @@ exceed `128 characters` for the node value or it may be truncated by aggregators
<br><br><br><br><!-- Tag block -->
## Alternate Enclosure
`<podcast:alternateEnclosure>`<br><br>
This element is meant to provide different versions of, or companion media to the main [`<enclosure>`](https://cyber.
harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) file. This could be an audio only version of a video
This element is meant to provide different versions of, or companion media to the main [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt) file. This could be an audio only version of a video
podcast to allow apps to switch back and forth between audio/video, lower (or higher) bitrate versions for bandwidth
constrained areas, alternative codecs for different device platforms, alternate URI schemes and download types such
as IPFS or WebTorrent, commentary tracks or supporting source clips, etc.

This is a complex tag, so implementors are highly encouraged to read the companion [document](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/alternateEnclosure/alternateEnclosure.md) for a
This is a complex tag, so implementors are highly encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/alternateEnclosure/alternateEnclosure.md) for a
fuller understanding of how this tag works and what it is capable of.

### Parent
Expand Down Expand Up @@ -681,8 +673,7 @@ every `<podcast:alternateEnclosure>` element.
<br><br><br><br><!-- Tag block -->
## Integrity
`<podcast:integrity>`<br><br>
This element defines a method of verifying integrity of the media given either an [SRI-compliant integrity string]
(https://www.w3.org/TR/SRI/) (preferred) or a base64 encoded PGP signature. This element is optional within a
This element defines a method of verifying integrity of the media given either an [SRI-compliant integrity string](https://www.w3.org/TR/SRI/) (preferred) or a base64 encoded PGP signature. This element is optional within a
`<podcast:alternateEnclosure>` element. It allows to ensure that the file has not been tampered with.

### Parent
Expand Down Expand Up @@ -711,10 +702,7 @@ This element defines a method of verifying integrity of the media given either a
`<podcast:guid>`<br><br>
This element is used to declare a unique, global identifier for a podcast. The value is a UUIDv5, and is easily
generated from the RSS feed url, with the **protocol scheme and trailing slashes stripped off**, combined with a
unique "podcast" namespace which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one]
(https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one]
(https://github.com/sporkmonger/uuidtools) in Ruby are widely available. Specifically for podcasts, [this tool from
RSS Blue](https://tools.rssblue.com/podcast-guid) can help generate a GUID by hand.
unique "podcast" namespace which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one](https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one](https://github.com/sporkmonger/uuidtools) in Ruby are widely available. Specifically for podcasts, [this tool from RSS Blue](https://tools.rssblue.com/podcast-guid) can help generate a GUID by hand.

A podcast gets assigned a podcast:guid once in its lifetime using its current feed url (at the time of assignment)
as the seed value. That GUID is then meant to follow the podcast from then on, for the duration of its life, even if
Expand Down Expand Up @@ -764,8 +752,7 @@ different platforms.

&nbsp; `type` is currently `podcast`, but may be extended in future.

&nbsp; A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609
-6b82873eab3c or the QR code given below.
&nbsp; A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609-6b82873eab3c or the QR code given below.

&nbsp; ![podnews-qr](https://user-images.githubusercontent.com/231941/127796108-d819de43-6c0e-4c7b-9579-ed1f19989443.png)

Expand All @@ -788,8 +775,7 @@ the payments, and a suggested amount denominated in the given cryptocurrency.
This element can exist at either the `<channel>` or `<item>` level. When it exists at the `<item>` level, it should
be treated as an "override" of whatever is defined at the `<channel>` level.

This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how
This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how
this tag works and what it is capable of.

### Parent
Expand Down Expand Up @@ -828,8 +814,7 @@ This element may only exist within a parent `<podcast:value>` element.

There is no limit on how many `valueRecipient` elements can be present in a given `<podcast:value>` element.

This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.
com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how this tag works
This is a complex tag, so implementors are HIGHLY encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/value/value.md) for a complete understanding of how this tag works
and what it is capable of.

### Parent
Expand Down Expand Up @@ -1000,8 +985,7 @@ Example use for a "music" playlist feed:
## Images
`<podcast:images>`<br><br>
This tag, when present, allows for specifying many different image sizes in a compact way at either the episode or
channel level. The syntax is borrowed from the HTML5 [srcset](https://html.spec.whatwg.org/multipage/images.
html#srcset-attributes) syntax. It allows for describing multiple image sources with width and pixel hints directly
channel level. The syntax is borrowed from the HTML5 [srcset](https://html.spec.whatwg.org/multipage/images.html#srcset-attributes) syntax. It allows for describing multiple image sources with width and pixel hints directly
in the attribute. Although the HTML5 `srcset` attribute allows relative urls, absolute urls are required in this
tag - since the feed url may not represent an appropriate base url for relativization.

Expand Down Expand Up @@ -1052,8 +1036,7 @@ All tags that are valid as children of a standard `<item>` tag are also valid as

When specifying the audio/video source, the [`<podcast:alternateEnclosure>`](#alternate-enclosure) tag is highly
encouraged since it gives the broadest coverage of possible stream types and is explicit in it's communication of
what transport protocol and media codecs are being used. In addition to [`<podcast:alternateEnclosure>`]
(#alternate-enclosure), a standard [`<enclosure>`](https://cyber.harvard.edu/rss/rss.
what transport protocol and media codecs are being used. In addition to [`<podcast:alternateEnclosure>`](#alternate-enclosure), a standard [`<enclosure>`](https://cyber.harvard.edu/rss/rss.
html#ltenclosuregtSubelementOfLtitemgt) should also be given as a fallback to support podcast apps that don't yet
implement [`<podcast:alternateEnclosure>`](#alternate-enclosure).

Expand All @@ -1072,8 +1055,7 @@ a page provided by their hosting company or a third party platform they have cho
stream to multiple platforms at once can also use the [`<podcast:contentLink>`](#content-link) tag to provide links
to those other platforms.

A robust, well-written `<podcast:liveItem>` tag will include all three of: [`<podcast:alternateEnclosure>`]
(#alternate-enclosure), [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt)
A robust, well-written `<podcast:liveItem>` tag will include all three of: [`<podcast:alternateEnclosure>`](#alternate-enclosure), [`<enclosure>`](https://cyber.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt)
and [`<podcast:contentLink>`](#content-link) to ensure the broadest interopability with podcast apps.

The function of `<guid>` within a live item tag is the same as it is within a regular item. If the `<guid>` of a
Expand Down Expand Up @@ -1442,12 +1424,10 @@ do not exceed `128 characters` for the node value or it may be truncated by aggr
### Attributes
* **complete (optional):** Boolean specifying if the podcast has no intention to release further episodes. If not
set, this should be assumed to be false.
* **dtstart (optional):** The `date` or `datetime` the recurrence rule begins as an [ISO8601-fornmatted]
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) string. If the
* **dtstart (optional):** The `date` or `datetime` the recurrence rule begins as an [ISO8601-fornmatted](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) string. If the
`rrule` contains a value for `COUNT`, then this attribute is required. If the `rrule` contains a value for `UNTIL`,
then the value of this attribute must be formatted to the same date/datetime standard.
* **rrule (recommended):** A recurrence rule as defined in [iCalendar RFC 5545 Section 3.3.10](https://www.
rfc-editor.org/rfc/rfc5545#section-3.3.10).
* **rrule (recommended):** A recurrence rule as defined in [iCalendar RFC 5545 Section 3.3.10](https://www.rfc-editor.org/rfc/rfc5545#section-3.3.10).

### Examples
Recreating most of Apple Podcasts Connect’s “Update Frequency” values is easily achieved:
Expand Down
8 changes: 8 additions & 0 deletions docs/element-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
14. [Caproni](https://caproni.fm/en)
15. [RSS Blue](https://rssblue.com/help/episode-metadata#transcript)
16. [RedCircle](https://redcircle.com)
17. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Locked `<podcast:locked>`
1. [Buzzsprout](https://www.buzzsprout.com/blog/podcast-locking)
Expand All @@ -36,6 +37,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
11. [Castos](https://castos.com/introducing-podcast-2-0-support/)
12. [RSS Blue](https://rssblue.com/help/podcast-metadata#locked)
13. [RedCircle](https://redcircle.com)
14. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Funding `<podcast:funding>`
1. [Buzzsprout](https://www.buzzsprout.com/)
Expand All @@ -57,6 +59,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
17. [Castos](https://castos.com/introducing-podcast-2-0-support/)
18. [RSS Blue](https://rssblue.com/help/podcast-metadata#funding-url)
19. [RedCircle](https://redcircle.com)
20. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Chapters `<podcast:chapters>`
1. [Podcast Chapters](https://chaptersapp.com/faq/jsonExport.html)
Expand Down Expand Up @@ -87,27 +90,32 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
3. [Podfriend](https://twitter.com/adamcurry/status/1357003546709938181)
4. [Caproni](https://caproni.fm/en)
5. [RSS Blue](https://rssblue.com/help/podcast-metadata#location)
6. [RSS.com](https://rss.com)

## Person `<podcast:person>`
1. [Castopod](https://podlibre.org/castopod-supports-the-person-tag/)
2. [Podfriend](https://podcastindex.social/@martin/105466202975036473)
3. [Podlove Podcast Publisher](https://github.com/podlove/podlove-publisher/commit/08d52424b359569d795d318163b0c697ef623199)
4. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## GUID `<podcast:guid>`
1. [Buzzsprout](https://www.buzzsprout.com)
2. [Castos](https://castos.com/introducing-podcast-2-0-support/)
3. [RSS Blue](https://rssblue.com/help/podcasting-2.0#progress-2)
4. [RedCircle](https://redcircle.com)
5. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Value `<podcast:value>`
1. [Castos](https://castos.com/earn-bitcoin-from-your-listeners/)
2. [usocial](http://usocial.me/history#v0.1.1)
3. [RSS Blue](https://rssblue.com/help/podcast-metadata#lightning-node)
4. [Alby](https://getalby.com/podcast-wallet)
5. [RSS.com](https://rss.com/blog/rss-com-enables-value-4-value-bitcoin-payments/)
6. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Medium `<podcast:medium>`
1. [RSS Blue](https://rssblue.com/help/podcast-metadata#medium)
2. [CastGarden](https://cast.garden/feeds/podcast/videos.xml?videoChannelId=37)

## Txt `<podcast:txt>`
1. [Transistor](https://transistor.fm/changelog/verification-code)
Expand Down
2 changes: 1 addition & 1 deletion docs/schema/podcast-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ This is, in fact, how the RSS feed works. To add our Podcast namespace to this f
<podcast:location geo="geo:30.2672,97.7431" osm="R113314">Austin, TX</podcast:location>

<itunes:author>John Doe</itunes:author>
<itunes:explicit>no</itunes:explicit>
<itunes:explicit>false</itunes:explicit>
<itunes:type>episodic</itunes:type>
<itunes:category text="News"/>
<itunes:category text="Technology"/>
Expand Down
3 changes: 2 additions & 1 deletion letters/letter-to-apple.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ Podping is currently being used by the following podcast hosts and the *podpings
- rss.com
- Captivate.fm
- podserve.fm
- Cast.Garden
- 3speak.tv
- podnews.net

Expand All @@ -75,4 +76,4 @@ With Apple on board and using Podping to provide much faster and more energy eff

PodcastIndex has been working for over a year now and been at the center of developing many new initiatives around what we've called Podcasting 2.0. Those innovations we've mentioned in this letter are just the tip of an iceberg.

We know Apple has been passionate about Podcasting for almost as long as we have, we would love to collaborate further and see Apple adopt some of the innovations our teams come up with! Please get in touch with Adam directly and lets work together on making Podcasting even better.
We know Apple has been passionate about Podcasting for almost as long as we have, we would love to collaborate further and see Apple adopt some of the innovations our teams come up with! Please get in touch with Adam directly and lets work together on making Podcasting even better.
2 changes: 2 additions & 0 deletions proposal-docs/social/platforms.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ The <social> and <socialInteract> elements both contain a platform and protocol
| instagram | instagram |
| slack | slack |
| discord | discord |
| castgarden | hive |
| 3speak | hive |
| peakd | hive |
| fountain | lightningcomments |
Expand All @@ -34,6 +35,7 @@ The <social> and <socialInteract> elements both contain a platform and protocol
- instagram
- slack
- discord
- cast.garden
- 3speak
- peakd.com
- fountain
Expand Down
2 changes: 2 additions & 0 deletions proposal-docs/social/social.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ There are three elements:
- instagram
- slack
- discord
- cast.garden
- 3speak
- peakd.com
-
Expand Down Expand Up @@ -112,6 +113,7 @@ There are three elements:
- instagram
- slack
- discord
- cast.garden
- 3speak
- peakd
- fountain
Expand Down
Loading

0 comments on commit 4ab4157

Please sign in to comment.