From 596f744194877c28af4612076a78f5a64d619696 Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Mon, 23 Aug 2021 15:50:51 +0200 Subject: [PATCH 01/42] implement a variant of #282 we probably should add a note regaring backwards compatibility (resonate -> `resonaterecordings.com`, relayfm -> `relay.fm`) and decentralised identifiers like `bitcoin`, `mastodon`, --- serviceslugs.txt | 94 ++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/serviceslugs.txt b/serviceslugs.txt index 583333e..cca972e 100644 --- a/serviceslugs.txt +++ b/serviceslugs.txt @@ -1,51 +1,51 @@ -acast -amazon -anchor -apple -audioboom -backtracks +acast.com +amazon.com +anchor.fm +apple.com +audioboom.com +backtracks.fm bitcoin -blubrry -buzzsprout -captivate -castos -fireside -fyyd -google -hypercatcher -libsyn +blubrry.com +buzzsprout.com +captivate.com +castos.com +fireside.fm +fyyd.de +google.com +hypercatcher.com +libsyn.com mastodon -megafono -megaphone -omnystudio -overcast -paypal -pinecast -podbean -podcastaddict -podcastguru -podcastindex +megafono.host +megaphone.fm +omnystudio.com +overcast.fm +paypal.com +pinecast.com +podbean.com +podcastaddict.com +podcastguru.io +podcastindex.org podcasts.com -podchaser -podcloud -podfriend -podiant -podigee -podnews -podomatic -podserve -podverse -redcircle -relayfm -resonate +podchaser.com +podcloud.fr +podfriend.com +podiant.co +podigee.com +podnews.com +podomatic.com +podserve.fm +podverse.fm +redcircle.com +relay.fm +resonaterecordings.com rss.com -shoutengine -simplecast -slack -soundcloud -spotify -spreaker -transistor -twitter -whooshkaa -zencast +shoutengine.com +simplecast.com +slack.com +soundcloud.com +spotify.com +spreaker.fm +transistor.fm +twitter.com +whooshkaa.com +zencast.com From ffccd275429d05c391cacdb665640d9a56791270 Mon Sep 17 00:00:00 2001 From: DEMedus <87878139+DEMedus@users.noreply.github.com> Date: Tue, 24 Aug 2021 20:16:06 -0400 Subject: [PATCH 02/42] Update example.xml Note: This is the first time I have ever used github, so if I didn't do something correctly, I apologize. Added examples for Item level --- example.xml | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 3 deletions(-) diff --git a/example.xml b/example.xml index 59ca8a7..b6673ee 100644 --- a/example.xml +++ b/example.xml @@ -17,6 +17,10 @@ https://example.com/show + y0ur-gu1d-g035-h3r3 + + my-podcast-license-v1 + yes Support the show! @@ -28,6 +32,11 @@ + + John Doe + johndoe@example.com + + https://example.com/images/pci_avatar-massive.jpg @@ -35,6 +44,8 @@ + Coming April 1st, 2021 + Episode 3 - The Future <p>A look into the future of podcasting and how we get to Podcasting 2.0!</p> @@ -56,7 +67,36 @@ Adam Curry Dave Jones Becky Smith - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -80,7 +120,34 @@ Adam Curry Dave Jones Marcus Brown - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -104,7 +171,28 @@ Adam Curry Dave Jones Jebick Morton - + + + + + + + + + + + + + + + + + + + + + + From fa91531024e377d696be5dce217113cb95a58785 Mon Sep 17 00:00:00 2001 From: Tom Rossi Date: Wed, 25 Aug 2021 16:33:23 -0400 Subject: [PATCH 03/42] Update element-support.md Adding Buzzsprout support for the podcast GUID --- docs/element-support.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/element-support.md b/docs/element-support.md index 362ace6..ad66f95 100644 --- a/docs/element-support.md +++ b/docs/element-support.md @@ -73,3 +73,6 @@ For elements that are included in the official [DTD](https://github.com/Podcasti 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) + +## GUID `` +1. [Buzzsprout](https://www.buzzsprout.com) From d16c461179df867f662135688316a9727a715b2b Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:01:29 +0200 Subject: [PATCH 04/42] Update recommendations.md --- .../recommendations/recommendations.md | 93 ++++++++++++------- 1 file changed, 57 insertions(+), 36 deletions(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 414a5c5..368830e 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -1,6 +1,6 @@ # The "podcast:recommendations" Specification -Version 1.1 by Benjamin Bellamy - 2021.08.11 +Version 1.2 by Benjamin Bellamy - 2021.08.31
@@ -14,7 +14,8 @@ This specification is about giving control to content creators on the content th - Version 1.1 adds: - `GUID` support for channel element, - a `reason` tag that explains why a specefic recommendation was included, - - a `medium-type` tag so that this can work with any feed, including non-podcast media, an element with no URL. + - a `medium` tag so that this can work with any feed, including non-podcast medium. (See \ for more information.) +- Version 1.2 brings minor corrections. All this was heavily inspired by all the work previously done by the Fellowship of the PodcastIndex on the chapters and soundbite tags. May they be thanked for it. GO PODCASTING!!! @@ -59,7 +60,7 @@ Example: ```json { - "version": "1.0", + "version": "1.2", "title": "Podnews podcasting news", "feed": "https://podnews.net/rss", "guid": "9b024349-ccf0-5f69-a609-6b82873eab3c" @@ -72,8 +73,8 @@ The "recommendation" object takes this basic form: ```json { - "type": "page", - "title": "History of podcasting", + "link-type": "generic", + "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", "url": "https://en.wikipedia.org/wiki/History_of_podcasting" } @@ -81,21 +82,41 @@ The "recommendation" object takes this basic form: There are 4 required attributes: - - `type` (required - string) The type of this recommended content (*"page"*, *"feed"*, *"item"*, *"text"*). - - `media-kind` (required - string) The media kind. It can be `podcast`, `audiobook`, `music`, `video`, `image`, `text`, `html` + - `link-type` (required - string) The link type of this recommended content, it can be: + - 'generic', + - 'feed', + - 'feed-item', + - 'none' + - `medium` (required - string) The medium kind. It can be: + - `podcast`, + - `audiobook`, + - `music`, + - `video`, + - `film`, + - `image`, + - `text`, + - `html` - `title` (required - string) The title for this recommended content. #### Optional Attributes: - - `url` (optional - string) The URL for this recommended content. If recommended content type is *"feed"* this is the home page of the podcast. If recommended content type is *"item"* this is the enclosure URL. + - `url` (optional - string) The URL for this recommended content. If recommended content type is *"feed"* this is the home page of the podcast/medium. If recommended content type is *"feed-item"* this is the enclosure URL. - `image` (optional - string) The image URL for this recommended content. Image must have a 1:1 ratio (square). - `displayStartTime` (optional - float) The start time (in seconds) that tells when this recommended content should start being displayed. If `displayStartTime` is omitted, recommendation will be displayed from the beginning. Applies only when called from an *Item* (not from the *Channel*). - `displayDuration` (optional - float) The duration (in seconds) that tells when this recommended content should stop being displayed. If `displayDuration` is omitted, recommendation will be displayed until the end. Applies only when called from an *Item* (not from the *Channel*). - - `feed` (optional - string) The RSS URL of this recommended content. Applies to *"feed"*, *"item"* types. - - `guid` (optional - string) The GUID of this recommended content. Applies to *"feed"* and *"item"* types. - - `startTime` (optional - float) The start time (in seconds) of this recommended content. Applies to *"item"* type only. - - `duration` (optional - float) The duration (in seconds) of this recommended content. Applies to *"item"* type only. - - `motive` (optional - string) The reason why this content is recommended. It can be `additional content`, `acknowledgment`, `thanking`, `advertising`, `audience exchange`, `similar content`, `also liked by the audience`, `made by the same team`, `do you want to know more` + - `feed` (optional - string) The RSS URL of this recommended content. Applies to *"feed"*, *"feed-item"* types. + - `guid` (optional - string) The GUID of this recommended content. Applies to *"feed"* and *"feed-item"* types. + - `startTime` (optional - float) The start time (in seconds) of this recommended content. Applies to *"feed-item"* type only. + - `duration` (optional - float) The duration (in seconds) of this recommended content. Applies to *"feed-item"* type only. + - `motive` (optional - string) The reason why this content is recommended. It can be: + - `references`, + - `additional content`, + - `acknowledgment`, + - `advertising`, + - `audience exchange`, + - `similar content`, + - `also liked by the audience`, + - `made by the same people` - `relevance` (optional - float) The relevance of this recommended content regarding this Channel or Item. Number must be in [0…1]. 0 is for irrelevant content, 1 is for contents that match perfectly. ## Basic example @@ -104,26 +125,26 @@ Here is what a very basic recommendations file may look like: ```json { - "version": "1.0", + "version": "1.2", "recommendations": [ { - "type": "text", - "media-kind": "text", + "link-type": "none", + "medium": "text", "title": "Eat five vegetables every day.", "motive": "advertising" }, { - "type": "page", - "media-kind": "html", + "link-type": "generic", + "medium": "html", "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", "url": "https://en.wikipedia.org/wiki/History_of_podcasting", - "motive": "do you want to know more" + "motive": "additional content" }, { - "type": "feed", - "media-kind": "podcast", + "link-type": "feed", + "medium": "podcast", "title": "Podcasting 2.0", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://podcastindex.org/podcast/920666", @@ -131,8 +152,8 @@ Here is what a very basic recommendations file may look like: "motive": "audience exchange" }, { - "type": "item", - "media-kind": "podcast", + "link-type": "item", + "medium": "podcast", "title": "Episode 26: Manning Battlestations", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://mp3s.nashownotes.com/PC20-26-2021-02-26-Final.mp3", @@ -140,8 +161,8 @@ Here is what a very basic recommendations file may look like: "guid": "PC2026" }, { - "type": "item", - "media-kind": "podcast", + "link-type": "item", + "medium": "podcast", "title": "GO PODCASTING!!!", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://mp3s.nashownotes.com/PC20-26-2021-02-26-Final.mp3", @@ -158,23 +179,23 @@ Here is what a very basic recommendations file may look like: ```json { - "version": "1.0", + "version": "1.2", "title": "Podnews podcasting news", "feed": "https://podnews.net/rss", "guid": "9b024349-ccf0-5f69-a609-6b82873eab3c", "recommendations": [ { - "type": "text", - "media-kind": "text", + "link-type": "none", + "medium": "text", "title": "Eat five vegetables every day.", "motive": "advertising" }, { "displayStartTime": 0.0, "displayDuration": 120.0, - "type": "page", - "media-kind": "html", + "link-type": "generic", + "medium": "html", "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", "url": "https://en.wikipedia.org/wiki/History_of_podcasting", @@ -184,8 +205,8 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 120.50, "displayDuration": 60.0, - "type": "feed", - "media-kind": "podcast", + "link-type": "feed", + "medium": "podcast", "title": "Podcasting 2.0", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://podcastindex.org/podcast/920666", @@ -196,8 +217,8 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 240.60, "displayDuration": 180.0, - "type": "item", - "media-kind": "podcast", + "link-type": "feed-item", + "medium": "podcast", "title": "Episode 26: Manning Battlestations", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://mp3s.nashownotes.com/PC20-26-2021-02-26-Final.mp3", @@ -208,8 +229,8 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 3600.10, "displayDuration": 60.0, - "type": "item", - "media-kind": "podcast", + "link-type": "item", + "medium": "podcast", "title": "GO PODCASTING!!!", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", "url": "https://mp3s.nashownotes.com/PC20-26-2021-02-26-Final.mp3", From 095ab62fa6bc31be839ce3dd2fe17483e584596c Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:03:36 +0200 Subject: [PATCH 05/42] Update recommendations.md --- proposal-docs/recommendations/recommendations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 368830e..528dab6 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -13,7 +13,7 @@ Several platforms are now implementing recommendation engines, but these feature This specification is about giving control to content creators on the content they want to recommend, and at the same time providing a free recommendation system to all players. - Version 1.1 adds: - `GUID` support for channel element, - - a `reason` tag that explains why a specefic recommendation was included, + - a `motive` tag that explains why a specific recommendation was included, - a `medium` tag so that this can work with any feed, including non-podcast medium. (See \ for more information.) - Version 1.2 brings minor corrections. All this was heavily inspired by all the work previously done by the Fellowship of the PodcastIndex on the chapters and soundbite tags. May they be thanked for it. From f14f7675894c391c3a39238b15f6083160de17aa Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:16:54 +0200 Subject: [PATCH 06/42] Update recommendations.md --- .../recommendations/recommendations.md | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 528dab6..7766ef8 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -1,6 +1,6 @@ # The "podcast:recommendations" Specification -Version 1.2 by Benjamin Bellamy - 2021.08.31 +Version 1.0 by Benjamin Bellamy - 2021.08.31
@@ -11,11 +11,10 @@ That comes with a huge drawback: finding and being found can be harsh. Podcast creators struggle to be found while podcast listeners struggle to find content. Several platforms are now implementing recommendation engines, but these features are expensive and unattainable for small players. Moreover they are slowly creating closed silos and removing power from content creators. This specification is about giving control to content creators on the content they want to recommend, and at the same time providing a free recommendation system to all players. -- Version 1.1 adds: +- Adding: - `GUID` support for channel element, - a `motive` tag that explains why a specific recommendation was included, - a `medium` tag so that this can work with any feed, including non-podcast medium. (See \ for more information.) -- Version 1.2 brings minor corrections. All this was heavily inspired by all the work previously done by the Fellowship of the PodcastIndex on the chapters and soundbite tags. May they be thanked for it. GO PODCASTING!!! @@ -73,7 +72,7 @@ The "recommendation" object takes this basic form: ```json { - "link-type": "generic", + "linkType": "generic", "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", "url": "https://en.wikipedia.org/wiki/History_of_podcasting" @@ -82,7 +81,7 @@ The "recommendation" object takes this basic form: There are 4 required attributes: - - `link-type` (required - string) The link type of this recommended content, it can be: + - `linkType` (required - string) The link type of this recommended content, it can be: - 'generic', - 'feed', - 'feed-item', @@ -125,17 +124,17 @@ Here is what a very basic recommendations file may look like: ```json { - "version": "1.2", + "version": "1.0", "recommendations": [ { - "link-type": "none", + "linkType": "none", "medium": "text", "title": "Eat five vegetables every day.", "motive": "advertising" }, { - "link-type": "generic", + "linkType": "generic", "medium": "html", "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", @@ -143,7 +142,7 @@ Here is what a very basic recommendations file may look like: "motive": "additional content" }, { - "link-type": "feed", + "linkType": "feed", "medium": "podcast", "title": "Podcasting 2.0", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", @@ -152,7 +151,7 @@ Here is what a very basic recommendations file may look like: "motive": "audience exchange" }, { - "link-type": "item", + "linkType": "item", "medium": "podcast", "title": "Episode 26: Manning Battlestations", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", @@ -161,7 +160,7 @@ Here is what a very basic recommendations file may look like: "guid": "PC2026" }, { - "link-type": "item", + "linkType": "item", "medium": "podcast", "title": "GO PODCASTING!!!", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", @@ -179,14 +178,14 @@ Here is what a very basic recommendations file may look like: ```json { - "version": "1.2", + "version": "1.0", "title": "Podnews podcasting news", "feed": "https://podnews.net/rss", "guid": "9b024349-ccf0-5f69-a609-6b82873eab3c", "recommendations": [ { - "link-type": "none", + "linkType": "none", "medium": "text", "title": "Eat five vegetables every day.", "motive": "advertising" @@ -194,7 +193,7 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 0.0, "displayDuration": 120.0, - "link-type": "generic", + "linkType": "generic", "medium": "html", "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", @@ -205,7 +204,7 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 120.50, "displayDuration": 60.0, - "link-type": "feed", + "linkType": "feed", "medium": "podcast", "title": "Podcasting 2.0", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", @@ -217,7 +216,7 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 240.60, "displayDuration": 180.0, - "link-type": "feed-item", + "linkType": "feed-item", "medium": "podcast", "title": "Episode 26: Manning Battlestations", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", @@ -229,7 +228,7 @@ Here is what a very basic recommendations file may look like: { "displayStartTime": 3600.10, "displayDuration": 60.0, - "link-type": "item", + "linkType": "item", "medium": "podcast", "title": "GO PODCASTING!!!", "image": "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg", From 6764cd351a4efac656072713aae6547f1fe11fdb Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:18:09 +0200 Subject: [PATCH 07/42] Update recommendations.md --- proposal-docs/recommendations/recommendations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 7766ef8..44cb946 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -86,7 +86,7 @@ There are 4 required attributes: - 'feed', - 'feed-item', - 'none' - - `medium` (required - string) The medium kind. It can be: + - `medium` (required - string) The medium type. It can be: - `podcast`, - `audiobook`, - `music`, From 472cee7aeb5f4dcf37dac02e03f0bd21ca496f8e Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:25:44 +0200 Subject: [PATCH 08/42] Update recommendations.md --- proposal-docs/recommendations/recommendations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 44cb946..383e64e 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -59,7 +59,7 @@ Example: ```json { - "version": "1.2", + "version": "1.0", "title": "Podnews podcasting news", "feed": "https://podnews.net/rss", "guid": "9b024349-ccf0-5f69-a609-6b82873eab3c" From 72f0b3ad135a3e71544467a86ad94dba4cc00cd4 Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:33:15 +0200 Subject: [PATCH 09/42] Update recommendations.md --- .../recommendations/recommendations.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 383e64e..10e0168 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -108,14 +108,14 @@ There are 4 required attributes: - `startTime` (optional - float) The start time (in seconds) of this recommended content. Applies to *"feed-item"* type only. - `duration` (optional - float) The duration (in seconds) of this recommended content. Applies to *"feed-item"* type only. - `motive` (optional - string) The reason why this content is recommended. It can be: - - `references`, - - `additional content`, - - `acknowledgment`, - - `advertising`, - - `audience exchange`, - - `similar content`, - - `also liked by the audience`, - - `made by the same people` + - `references` (content that was used when creating this podcast, similar to the Wikipedia References paragraph), + - `additional content` (content that provides extra information), + - `acknowledgment` (thanking people), + - `advertising` (sponsored content), + - `audience exchange` (exchanging audiences between podcasts), + - `content-based recommendation` (content related thank to semantic indexing), + - `audience-based recommendation` (people who liked this also liked…), + - `made by the same people` (the creators of this podcast also made that…) - `relevance` (optional - float) The relevance of this recommended content regarding this Channel or Item. Number must be in [0…1]. 0 is for irrelevant content, 1 is for contents that match perfectly. ## Basic example @@ -198,7 +198,7 @@ Here is what a very basic recommendations file may look like: "title": "History of podcasting", "image": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Podcasts_%28iOS%29.svg/440px-Podcasts_%28iOS%29.svg.png", "url": "https://en.wikipedia.org/wiki/History_of_podcasting", - "motive": "do you want to know more", + "motive": "additional content", "relevance": 0.8 }, { @@ -237,7 +237,7 @@ Here is what a very basic recommendations file may look like: "guid": "PC2026", "startTime": 4737.0, "duration": 5.0, - "motive": "do you want to know more", + "motive": "additional content", "relevance": 0.9 } ] From 450b7dd80a78928482fb0aa73f4bbbbb8665288f Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:33:57 +0200 Subject: [PATCH 10/42] Update recommendations.md --- proposal-docs/recommendations/recommendations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 10e0168..6da978a 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -113,7 +113,7 @@ There are 4 required attributes: - `acknowledgment` (thanking people), - `advertising` (sponsored content), - `audience exchange` (exchanging audiences between podcasts), - - `content-based recommendation` (content related thank to semantic indexing), + - `content-based recommendation` (content related thanks to semantic indexation), - `audience-based recommendation` (people who liked this also liked…), - `made by the same people` (the creators of this podcast also made that…) - `relevance` (optional - float) The relevance of this recommended content regarding this Channel or Item. Number must be in [0…1]. 0 is for irrelevant content, 1 is for contents that match perfectly. From cd9253e8976ec772204f3acaec7bd3e104a80f1c Mon Sep 17 00:00:00 2001 From: Benjamin Bellamy Date: Tue, 31 Aug 2021 17:35:22 +0200 Subject: [PATCH 11/42] Update recommendations.md --- proposal-docs/recommendations/recommendations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/proposal-docs/recommendations/recommendations.md b/proposal-docs/recommendations/recommendations.md index 6da978a..b056851 100644 --- a/proposal-docs/recommendations/recommendations.md +++ b/proposal-docs/recommendations/recommendations.md @@ -15,6 +15,7 @@ This specification is about giving control to content creators on the content th - `GUID` support for channel element, - a `motive` tag that explains why a specific recommendation was included, - a `medium` tag so that this can work with any feed, including non-podcast medium. (See \ for more information.) + All this was heavily inspired by all the work previously done by the Fellowship of the PodcastIndex on the chapters and soundbite tags. May they be thanked for it. GO PODCASTING!!! From 84a62191006f243f979905cf4555bd8e98be3b28 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Tue, 31 Aug 2021 21:01:10 -0500 Subject: [PATCH 12/42] liveItem tag draft --- README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/README.md b/README.md index c1a1867..7a9d69c 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,64 @@ full implementation details. The following tags should be considered purely as work in progress proposals. They should not be relied upon or implemented except for testing purposes and experimentation. +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/212) + +
+ + + +```xml + + + +``` + + + +Channel + +(optional | multiple) + +This element is used for a feed to deliver a live stream to podcast apps. It takes the same format as a standard `` episode tag, but holds a subset of elements along with +some additional new elements that are appropriate for a live stream context. The `start` and `end` attributes denote when the live stream "should" start and end. But, real life +dictates that those times might not be adhered to. Apps are therefore encouraged not to rely on those times as anything more than a suggestion. The canonical way to know if a +stream has started is with the `status` attribute. If `status` is "live" then the stream has started. + +This item will also make use of the [podping](https://podping.cloud) notification network. A podping notification SHOULD be sent out by the host when the live stream starts to let +apps know. + + +Example: +```xml + + Podcasting 2.0 Live Show + A look into the future of podcasting and how we get to Podcasting 2.0! + https://example.com/podcast/live + https://example.com/live + John Doe (john@example.com) + + Adam Curry + Dave Jones + Becky Smith + + +``` + +
+ + ### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/205)
From 3ad60761079d4ca6f2c27cb1da4a0c7b8174fda9 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Tue, 31 Aug 2021 21:02:27 -0500 Subject: [PATCH 13/42] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a9d69c..34ad9c2 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ full implementation details. The following tags should be considered purely as work in progress proposals. They should not be relied upon or implemented except for testing purposes and experimentation. -### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/212) +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/212)
From 0d3cfc60ab425cfe5b0bc0ec1ce80edc255be528 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 10:05:09 -0500 Subject: [PATCH 14/42] medium tag --- README.md | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 34ad9c2..d59597e 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ full implementation details.
-### Phase 4 (Open for Proposals) +## Phase 4 (Open for Proposals) The following tags should be considered purely as work in progress proposals. They should not be relied upon or implemented except for testing purposes and experimentation. @@ -208,6 +208,7 @@ Example:
+---- ### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/205) @@ -249,7 +250,55 @@ Example:
+---- +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/263) + +
+ + + +```xml +[podcast|music|video|film|audiobook(string)] +``` + + + +Channel + +(optional | single) + +This tag tells the an application what the content contained within the feed IS, as opposed to what the content is ABOUT in the case of a category. This allows a podcast app to +modify it's behavior or UI to give a better experience to the user for this content. For example, if a podcast has `music` an app may choose to +reset playback speed to 1x and adjust it's EQ settings to be better for music vs. spoken word. + +Accepted medium names are curated within a list maintained by the community as new mediums are discovered over time. Newly proposed mediums should require some level of +justification to be added to this list. One may argue and/or prove use of a new medium even for only one application, should it prove different enough from existing mediums to have meaning. + +**This list is currently a non-exhaustive proposal and subject to change** + +- `podcast` - Describes a feed for a podcast show. + - *Justification*: Nothing new, as this is what all podcasts that exist default to today. If no `medium` tag is present in the channel, this medium is assumed. +- `music` - A feed of music organized into an "album" with each item a song within the album. + - *Justification*: Music has existed as a medium for a very long time and dedicated music applications already exist. +- `video` - Like a "podcast" but used in a more visual experience + - *Justification*: Videos add different enough level of user experience to discern them from regular podcasts. Sites like YouTube already exist and prove out the existence of "videos" as a medium. +- `film` - Specific types of videos with one item per feed. + - *Justification*: While doable, users have come to expect to be able to search for films without directly subscribing to a high level organization of "channels." This allows the application to make beneficial assumptions regarding how to handle an item within a film. Films exist as a medium already with dedicated applications today. +- `audiobook` - Specific types of audio with one item per feed. + - *Justification*: Similar to a film, users typically search for audiobooks by name without some level of subscription/following. This isn't to say that an application couldn't allow following an "author," for example, but that wouldn't be organized at the channel level. Audiobooks exist as a medium already with dedicated applications today. + +Example use for a "podcast": +```xml +podcast +``` + +Example use for "music": +```xml +music +``` + +
## Other Proposals From c2b8eb73cd4e0df72437ef42536efe824c8e56c8 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 11:54:32 -0500 Subject: [PATCH 15/42] gateway episodes --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/README.md b/README.md index d59597e..1d770d2 100644 --- a/README.md +++ b/README.md @@ -300,6 +300,103 @@ Example use for "music":
+---- + +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/281) + +
+ + + +```xml + +[free form message to listeners(string)] + +``` + + + +Item + +(optional | multiple) + +This tag, when present in an `` indicates that this episode is a so-called "gateway episode". Gateway episodes are episodes that the podcaster (or maybe crowd sourced) thinks +represent the best entry point into a long running show. If a podcast has 300 episodes, it might be a good idea to designate 1 or more older episodes as the best place to start. + +The `order` attribute is an unsigned integer that is meant as an ascending listening order. The episode with `order="1"` should be played first, then `order="2"` and so on. + +When podcast apps encounter gateway episodes, it is suggested that they present these episodes (in some form of UI) to the user when the user subscribes or follows the podcast. + +Example of a single gateway: +```xml + + Podcasting 2.0 - How it all Began + A look into the future of podcasting and how we get to Podcasting 2.0! + https://example.com/pc20/ep1 + https://example.com/pc20/ep1 + John Doe (john@example.com) + + Adam Curry + Dave Jones + Becky Smith + + Start here! + +``` + +Example of a gateway series: +```xml + + Podcasting 2.0 - How it all Began + A look into the future of podcasting and how we get to Podcasting 2.0! + https://example.com/pc20/ep1 + https://example.com/pc20/ep1 + John Doe (john@example.com) + + Adam Curry + Dave Jones + Becky Smith + + Fri, 11 Sep 2020 18:51:09 GMT + 1 + 1 + Start here! + + + + Podcasting 2.0 - The tide has turned + What a big week. So many important things happened this week. We dive into it all and what it means! + https://example.com/pc20/ep45 + https://example.com/pc20/ep45 + John Doe (john@example.com) + + Adam Curry + Dave Jones + Becky Smith + + Fri, 20 Aug 2021 20:23:55 GMT + 45 + 45 + We reached a milestone here! + +``` + +
+ ## Other Proposals A list of the current proposed tags can be found in the issues section [here](https://github.com/Podcastindex-org/podcast-namespace/labels/proposal). From d2062e3056e57fda5c7e283c835e212d5f67d80f Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 11:55:27 -0500 Subject: [PATCH 16/42] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d770d2..119c580 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,7 @@ Example use for "music": ---- -### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/281) +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/281)
From 20f01b97eb310d6e3016187acff468a5eac0a91a Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 14:18:52 -0500 Subject: [PATCH 17/42] images --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/README.md b/README.md index 119c580..e3ed38e 100644 --- a/README.md +++ b/README.md @@ -395,6 +395,39 @@ Example of a gateway series:
``` +---- + +### **\** - [Discuss](https://github.com/Podcastindex-org/podcast-namespace/issues/43) + +
+ + + +```xml + +``` + + + +Channel or Item + +(optional | single) + +This tag, when present, allows for specifying many different images sizes in a compact way. 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. + +Example of a single gateway: +```xml + +``` +
## Other Proposals From bc0c48b3a94f7f1887e8b91ddce0bb21c9c50d6a Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 14:20:19 -0500 Subject: [PATCH 18/42] images --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e3ed38e..7695a9c 100644 --- a/README.md +++ b/README.md @@ -415,8 +415,9 @@ Channel or Item (optional | single) -This tag, when present, allows for specifying many different images sizes in a compact way. 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. +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 in the attribute. Example of a single gateway: ```xml From 965ba0bb04c1c09f7d882825551e365f1dca827f Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 16:33:59 -0500 Subject: [PATCH 19/42] tweak --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7695a9c..b671bed 100644 --- a/README.md +++ b/README.md @@ -202,7 +202,9 @@ Example: Adam Curry Dave Jones Becky Smith - + + +
``` From fec7ce5728e513ea17196bdd875f4c8fde16ab6b Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 16:46:41 -0500 Subject: [PATCH 20/42] phase 4 close date --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b671bed..2ac882e 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Please read it before contributing if you aren't familiar with it. **Phase 3** - [Closed] Comment period closed on `6/1/21` and 5 tags were **formalized**. -**Phase 4** - [Open] As of 6/9/2021, all proposals for phase 4 are welcome. Current tag proposals under consideration are listed here. No closing date is set at this time. +**Phase 4** - [Open] Comment period will close on 12/1/21, all proposals for phase 4 are welcome. Current tag proposals under consideration are listed below.

@@ -146,7 +146,7 @@ full implementation details.
-## Phase 4 (Open for Proposals) +## Phase 4 (Closes on 12/1/2021) The following tags should be considered purely as work in progress proposals. They should not be relied upon or implemented except for testing purposes and experimentation. From e9f91e5efa766608b9a1585549d8f68ba6325936 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 17:22:48 -0500 Subject: [PATCH 21/42] formalize value tag --- docs/1.0.md | 98 +++++++++++++++++++++++++++++++++++++++++++++++++- value/value.md | 2 +- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index fe3167f..6824d5a 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -508,7 +508,8 @@ Example GUID for feed url `podnews.net/rss`: 9b024349-ccf0-5f69-a609-6b82873eab3c ``` -### Guid-enabled fast-follow share links +#### Guid-enabled fast-follow share links + The `podcast:guid` value above enables podcasters to produce a link that can share a podcast on a variety of different platforms. The format of the link is `https://(a podcast website link)#fastfollow-(type):(a podcast guid)` @@ -522,3 +523,98 @@ A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast When scanned on a mobile phone's camera app, this link will go to the specified podcast website. Behavior of this website is up to the creator: some may use a default homepage, others may sniff the useragent and open a default podcast app on a device. In the working example, above, an iPhone user may be taken to Apple Podcasts; an Android user may be taken to Google Podcasts; and another device will be given a page with a player. When scanned on a QR code reader inside a podcast app, like [CurioCaster](https://curiocaster.com/), the app can parse the `podcast:guid` value from the URL, allowing the podcast to be opened within the application. + + +## Value +`` +This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. + +This element can exist at either the `` or `` level. When it exists at the `` level, it should be treated as an "override" of whatever is defined at the `` 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 tag works and what it is capable of. + +#### Parent +`` or `` + +#### Count +Single + +#### Node Value +The node value must be one or more `` elements. + +#### Attributes + - **type:** (required) This is the service slug of the cryptocurrency or protocol layer. + - **method:** (required) This is the transport mechanism that will be used. + - **suggested:** (optional) This is an optional suggestion on how much cryptocurrency to send with each payment. + +#### Examples +```xml + +``` + + +## Value Recipient +`` +The `valueRecipient` tag designates various destinations for payments to be sent to during consumption of the enclosed media. Each recipient is considered to receive a "split" of the total payment according to the number of shares given +in the `split` attribute. + +This element may only exist within a parent `` element. + +There is no limit on how many `valueRecipient` elements can be present in a given `` 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 and what it is capable of. + +#### Parent +`` + +#### Count +Multiple + +#### Node Value +This element has no node value. + +#### Attributes + - **name** (recommended) A free-form string that designates who or what this recipient is. + - **customKey** (optional) The name of a custom record key to send along with the payment. + - **customValue** (optional) A custom value to pass along with the payment. This is considered the value that belongs to the `customKey`. + - **type** (required) A slug that represents the type of receiving address that will receive the payment. + - **address** (required) This denotes the receiving address of the payee. + - **split** (required) The number of shares of the payment this recipient will receive. + - **fee** (optional) If this attribute is not specified, it is assumed to be false. + +#### Examples +```xml + + + + + + +``` \ No newline at end of file diff --git a/value/value.md b/value/value.md index a91b9fb..4c95f31 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,6 @@ # The "podcast:value" Specification -Version 1.3 by Dave Jones - 2021.02.25 +Version 1.4 by @daveajones, @dergigi - 2021.09.01
From 00f0816ee8795314007fcdb3424a8e55b2173828 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 17:25:48 -0500 Subject: [PATCH 22/42] formalize value tag --- docs/1.0.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/1.0.md b/docs/1.0.md index 6824d5a..b4e6910 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -525,6 +525,9 @@ When scanned on a mobile phone's camera app, this link will go to the specified When scanned on a QR code reader inside a podcast app, like [CurioCaster](https://curiocaster.com/), the app can parse the `podcast:guid` value from the URL, allowing the podcast to be opened within the application. +

+ + ## Value `` This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. @@ -557,6 +560,8 @@ The node value must be one or more `` elements. > ``` +

+ ## Value Recipient `` From bec4837d9a2837d51a6b5fdfd85646ca8a9837ee Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 1 Sep 2021 17:28:54 -0500 Subject: [PATCH 23/42] attribution @dergigi --- value/value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/value/value.md b/value/value.md index 4c95f31..39be43a 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,6 @@ # The "podcast:value" Specification -Version 1.4 by @daveajones, @dergigi - 2021.09.01 +Version 1.4 by [@daveajones](https://github.com/daveajones), [@dergigi](https://github.com/dergigi) - 2021.09.01
From f33b898f61dbafbebe9f52827cbbe42e4e636382 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 08:34:29 -0500 Subject: [PATCH 24/42] layout --- docs/1.0.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index b4e6910..64d6021 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -529,7 +529,7 @@ When scanned on a QR code reader inside a podcast app, like [CurioCaster](https: ## Value -`` +``
This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. This element can exist at either the `` or `` level. When it exists at the `` level, it should be treated as an "override" of whatever is defined at the `` level. @@ -537,21 +537,21 @@ This element can exist at either the `` or `` level. When it exi 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 +### Parent `` or `` -#### Count +### Count Single -#### Node Value +### Node Value The node value must be one or more `` elements. -#### Attributes +### Attributes - **type:** (required) This is the service slug of the cryptocurrency or protocol layer. - **method:** (required) This is the transport mechanism that will be used. - **suggested:** (optional) This is an optional suggestion on how much cryptocurrency to send with each payment. -#### Examples +### Examples ```xml ` elements. ## Value Recipient -`` +``
The `valueRecipient` tag designates various destinations for payments to be sent to during consumption of the enclosed media. Each recipient is considered to receive a "split" of the total payment according to the number of shares given in the `split` attribute. @@ -575,16 +575,16 @@ There is no limit on how many `valueRecipient` elements can be present in a give 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 +### Parent `` -#### Count +### Count Multiple -#### Node Value +### Node Value This element has no node value. -#### Attributes +### Attributes - **name** (recommended) A free-form string that designates who or what this recipient is. - **customKey** (optional) The name of a custom record key to send along with the payment. - **customValue** (optional) A custom value to pass along with the payment. This is considered the value that belongs to the `customKey`. @@ -593,7 +593,7 @@ This element has no node value. - **split** (required) The number of shares of the payment this recipient will receive. - **fee** (optional) If this attribute is not specified, it is assumed to be false. -#### Examples +### Examples ```xml Date: Thu, 2 Sep 2021 08:36:12 -0500 Subject: [PATCH 25/42] layout --- docs/1.0.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index 64d6021..769e143 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -529,7 +529,7 @@ When scanned on a QR code reader inside a podcast app, like [CurioCaster](https: ## Value -``
+``

This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. This element can exist at either the `` or `` level. When it exists at the `` level, it should be treated as an "override" of whatever is defined at the `` level. @@ -538,13 +538,13 @@ This is a complex tag, so implementors are HIGHLY encouraged to read the compani this tag works and what it is capable of. ### Parent -`` or `` + `` or `` ### Count -Single + Single ### Node Value -The node value must be one or more `` elements. + The node value must be one or more `` elements. ### Attributes - **type:** (required) This is the service slug of the cryptocurrency or protocol layer. From d45ea0df9b1127822192885dfcb46b216f8fb664 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 08:38:01 -0500 Subject: [PATCH 26/42] layout --- docs/1.0.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index 769e143..7c81300 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -538,13 +538,13 @@ This is a complex tag, so implementors are HIGHLY encouraged to read the compani this tag works and what it is capable of. ### Parent - `` or `` +  `` or `` ### Count - Single +  Single ### Node Value - The node value must be one or more `` elements. +  The node value must be one or more `` elements. ### Attributes - **type:** (required) This is the service slug of the cryptocurrency or protocol layer. From 3fb9d23d3a0a67b4d37ec804dae33cdd404de71d Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 08:55:52 -0500 Subject: [PATCH 27/42] cleanup layout --- docs/1.0.md | 182 ++++++++++++++++++++++++++-------------------------- 1 file changed, 92 insertions(+), 90 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index 7c81300..cdccb50 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -13,20 +13,22 @@ Each tag below exists in the podcast namespace within the specified parent. All Anywhere the url of a hyper-text based resource is specified, it must be given as `https:` and not `http:`. -

+

## Transcript -`` +``

This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats. -#### Parent -`` +Detailed file format information and example files are [here](../transcripts/transcripts.md). -#### Count -Multiple +### Parent +  `` -#### Attributes +### Count +  Multiple + +### Attributes - **url (required):** URL of the podcast transcript. - **type (required):** Mime type of the file such as `text/plain`, `text/html`, `application/srt`, `text/vtt`, `application/json` @@ -35,7 +37,7 @@ Multiple - **rel (optional):** If the rel="captions" attribute is present, the linked file is considered to be a closed captions file, regardless of what the mime type is. In that scenario, time codes are assumed to be present in the file in some capacity. -#### Examples +### Examples `` `` @@ -44,114 +46,121 @@ Multiple `` -Detailed file format information and example files are [here](../transcripts/transcripts.md). - -

+

## Locked -`` +``

This tag may be set to `yes` or `no`. The purpose is to tell other podcast platforms whether they are allowed to import this feed. A value of `yes` means that any attempt to import this feed into a new platform should be rejected. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Attributes +### Node value +  The node value must be "yes" or "no". + +### Attributes - **owner (required):** The owner attribute is an email address that can be used to verify ownership of this feed during move and import operations. This could be a public email or a virtual email address at the hosting provider that redirects to the owner's true email address. This is a critical element, and it is expected that podcast hosting providers (if not providing virtual addresses) will allow setting this element's value in their GUI with an emphasis to their users of how important it is to have this be a valid, working email address. -#### Examples +### Examples `yes` `no` -

+

## Funding -`` +``

This tag lists possible donation/funding links for the podcast. The content of the tag is the recommended string to be used with the link. -#### Parent -`` +### Parent +  `` -#### Count -Multiple +### Count +  Multiple -#### Attributes +### Node value +  This is a free form string supplied by the creator which they expect to be displayed in the app next to the link. Please do not exceed `128 characters` for the node value or it may be +truncated by aggregators. + +### Attributes - **url (required):** The URL to be followed to fund the podcast. -#### Examples +### Examples `Support the show!` `Become a member!` -Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. - -

+

## Chapters -`` -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. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Attributes +### Attributes - **url (required):** The URL where the chapters file is located. - **type (required):** Mime type of file - JSON prefered, 'application/json+chapters'. -#### Examples +### Examples `` -

+

## Soundbite -`` -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 `` element. +``

+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 `` element. -#### Parent -`` +### Parent +  `` -#### Count -Multiple +### Count +  Multiple -#### Attributes +### Node value +  This is a free form string from the podcast creator to specify a title for the soundbite. If there is no node value, the title of the episode should be used. Please do not exceed `128 characters` +for the node value or it may be truncated by aggregators. + +### Attributes - **startTime (required):** The time where the soundbite begins - **duration (required):** How long is the soundbite (recommended between 15 and 120 seconds) - - **node value (optional):** Used as free form string from the podcast creator to specify a title for the soundbite (null defaults to episode title) -#### Examples +### Examples `` `Why the Podcast Namespace Matters` -Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. - -

+

## Person -`` -This element specifies a person of interest to the podcast. It is primarily intended to identify people like hosts, co-hosts and guests. Although, it is flexible enough to allow fuller credits to be given using the roles and groups that are listed in the [Podcast Taxonomy Project](https://podcasttaxonomy.com/) +``

+This element specifies a person of interest to the podcast. It is primarily intended to identify people like hosts, co-hosts and guests. Although, it is flexible enough to allow fuller credits to be +given using the roles and groups that are listed in the [Podcast Taxonomy Project](https://podcasttaxonomy.com/) -#### Parent -`` or `` +### Parent +  `` or `` -#### Count -Multiple +### Count +  Multiple -#### Node value -This is the full name or alias of the person. This value cannot be blank. +### Node value +  This is the full name or alias of the person. This value cannot be blank. Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. -#### Attributes +### Attributes - **role:** (optional) Used to identify what role the person serves on the show or episode. This should be a reference to an official role within the Podcast Taxonomy Project list (see below). If `role` is missing then "host" is assumed. - **group:** (optional) This should be a reference to an official group within the Podcast Taxonomy Project list. If `group` is not present, then "cast" is assumed. - **img:** (optional) This is the url of a picture or avatar of the person. @@ -161,9 +170,7 @@ The `role` and `group` attributes are case-insensitive. So, "Host" is the same The full taxonomy list is [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/taxonomy.json) as a json file. -Please do not exceed `128 characters` for the node value or they may be truncated by aggregators. - -#### Examples +### Examples `John Smith` `Jane Doe` @@ -174,59 +181,57 @@ Please do not exceed `128 characters` for the node value or they may be truncate `Becky Smith` -

+

## Location -`` -This tag is intended to describe the location of editorial focus for a podcast's content (i.e. "what place is this podcast about?"). The tag has many use cases and is one of the more complex ones. You are **highly encouraged** to read the full [implementation document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) before starting to code for it. +``

+This tag is intended to describe the location of editorial focus for a podcast's content (i.e. "what place is this podcast about?"). The tag has many use cases and is one of the more complex ones. You +are **highly encouraged** to read the full [implementation document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) before starting to code for it. -#### Parent -`` or `` +### Parent +  `` or `` -#### Count -Single +### Count +  Single -#### Node Value -This is a free-form string meant to be a human readable location. It may conform to conventional location verbiage (i.e. "Austin, TX"), but it shouldn't be depended on to be parseable in any specific way. This value cannot be blank. +### Node Value +  This is a free-form string meant to be a human readable location. It may conform to conventional location verbiage (i.e. "Austin, TX"), but it shouldn't be depended on to be parseable in any specific +way. This value cannot be blank. Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. -#### Attributes +### Attributes - **geo:** (recommended) This is a latitude and longitude given in "geo" notation (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") -Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. - -#### Examples +### Examples `Austin, TX` `Birmingham Civil Rights Museum` `Dreamworld (Queensland)` -Please see the [implementation document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) and the [example feed](https://github.com/Podcastindex-org/podcast-namespace/blob/main/example.xml) for more examples. - -

+

## Season -`` +``

This element allows for identifying which episodes in a podcast are part of a particular "season", with an optional season name attached. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Node Value -The node value is an integer, and represents the season "number". It is required. +### Node Value +  The node value is an integer, and represents the season "number". It is required. -#### Attributes +### Attributes - **name:** (optional) - This is the "name" of the season. If this attribute is present, applications are free to **not** show the season number to the end user, and may use it simply for chronological sorting and grouping purposes. Please do not exceed `128 characters` for the name attribute. -#### Examples +### Examples `5` `3` @@ -581,9 +586,6 @@ this tag works and what it is capable of. ### Count Multiple -### Node Value -This element has no node value. - ### Attributes - **name** (recommended) A free-form string that designates who or what this recipient is. - **customKey** (optional) The name of a custom record key to send along with the payment. From 5fde6a90975b6e755c6e4d5b61d031f88788b543 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 10:45:12 -0500 Subject: [PATCH 28/42] more cleanup --- docs/1.0.md | 298 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 177 insertions(+), 121 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index cdccb50..bdc8a9b 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -38,13 +38,21 @@ Detailed file format information and example files are [here](../transcripts/tra - **rel (optional):** If the rel="captions" attribute is present, the linked file is considered to be a closed captions file, regardless of what the mime type is. In that scenario, time codes are assumed to be present in the file in some capacity. ### Examples -`` +```xml + +``` -`` +```xml + +``` -`` +```xml + +``` -`` +```xml + +``` @@ -66,9 +74,13 @@ This tag may be set to `yes` or `no`. The purpose is to tell other podcast platf - **owner (required):** The owner attribute is an email address that can be used to verify ownership of this feed during move and import operations. This could be a public email or a virtual email address at the hosting provider that redirects to the owner's true email address. This is a critical element, and it is expected that podcast hosting providers (if not providing virtual addresses) will allow setting this element's value in their GUI with an emphasis to their users of how important it is to have this be a valid, working email address. ### Examples -`yes` +```xml +yes +``` -`no` +```xml +no +``` @@ -91,9 +103,13 @@ truncated by aggregators. - **url (required):** The URL to be followed to fund the podcast. ### Examples -`Support the show!` +```xml +Support the show! +``` -`Become a member!` +```xml +Become a member! +``` @@ -114,7 +130,9 @@ file for a description of the chapter file syntax. And, see the [example.json](h - **type (required):** Mime type of file - JSON prefered, 'application/json+chapters'. ### Examples -`` +```xml + +``` @@ -139,9 +157,13 @@ for the node value or it may be truncated by aggregators. - **duration (required):** How long is the soundbite (recommended between 15 and 120 seconds) ### Examples -`` +```xml + +``` -`Why the Podcast Namespace Matters` +```xml +Why the Podcast Namespace Matters +``` @@ -171,15 +193,25 @@ The `role` and `group` attributes are case-insensitive. So, "Host" is the same The full taxonomy list is [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/taxonomy.json) as a json file. ### Examples -`John Smith` +```xml +John Smith +``` -`Jane Doe` +```xml +Jane Doe +``` -`Alice Brown` +```xml +Alice Brown +``` -`Alice Brown` +```xml +Alice Brown +``` -`Becky Smith` +```xml +Becky Smith +``` @@ -204,11 +236,17 @@ way. This value cannot be blank. Please do not exceed `128 characters` for the - **osm:** (recommended) The Open Street Map identifier of this place, given using the OSM notation (i.e. "R113314") ### Examples -`Austin, TX` +```xml +Austin, TX +``` -`Birmingham Civil Rights Museum` +```xml +Birmingham Civil Rights Museum +``` -`Dreamworld (Queensland)` +```xml +Dreamworld (Queensland) +``` @@ -232,73 +270,91 @@ This element allows for identifying which episodes in a podcast are part of a pa Please do not exceed `128 characters` for the name attribute. ### Examples -`5` +```xml +5 +``` -`3` +```xml +3 +``` -`1` +```xml +1 +``` -`3` - -

+```xml +3 +``` + +

## Episode -`` +``

This element exists largely for compatibility with the `season` tag. But, it also allows for a similar idea to what "name" functions as in that element. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Node Value -The node value is a decimal number. It is required. +### Node Value +  The node value is a decimal number. It is required. -#### Attributes +### Attributes - **display:** (optional) - If this attribute is present, podcast apps and aggregators are encouraged to show its value instead of the purely numerical node value. This attribute is a string. -The episode numbers are decimal, so numbering such as `100.5` is acceptable if there was a special mini-episode published between two other episodes. In that scenario, the number would help with proper chronological sorting, while the `display` attribute could specify an alternate special "number" (a moniker) to display for the episode in a podcast player app UI. +The episode numbers are decimal, so numbering such as `100.5` is acceptable if there was a special mini-episode published between two other episodes. In that scenario, the number would help with proper +chronological sorting, while the `display` attribute could specify an alternate special "number" (a moniker) to display for the episode in a podcast player app UI. Please do not exceed `32 characters` for the display attribute. -#### Examples -`3` +### Examples +```xml +3 +``` -`315.5` +```xml +315.5 +``` -`204` +```xml +204 +``` -`9` - -

+```xml +9 +``` + +

## Trailer -`` +``

This element is used to define the location of an audio or video file to be used as a trailer for the entire podcast or a specific season. There can be more than one trailer present in the channel of the feed. This element is basically just like an `` with the extra `pubdate` and `season` attributes added. -#### Parent -`` +If there is more than one trailer tag present in the channel, the most recent one (according to its `pubdate`) should be chosen as the preview by default within podcast apps. -#### Count -Multiple +### Parent +  `` -#### Node Value -The node value is a string, which is the title of the trailer. It is required. +### Count +  Multiple -#### Attributes +### Node Value +  The node value is a string, which is the title of the trailer. It is required. Please do not exceed `128 characters` for the node value or it may be truncated by aggregators. + +### Attributes - **url:** (required) This is a url that points to the audio or video file to be played. This attribute is a string. - **pubdate:** (required) The date the trailer was published. This attribute is an RFC2822 formatted date string. - **length:** (recommended) The length of the file in bytes. This attribute is a number. - **type:** (recommended) The mime type of the file. This attribute is a string. - **season:** (optional) If this attribute is present it specifies that this trailer is for a particular season number. This attribute is a number. -If there is more than one trailer tag present in the channel, the most recent one (according to its `pubdate`) should be chosen as the preview by default within podcast apps. If the `season` attribute is present, it must -be a number that matches the format of the `` tag. So, for a podcast that has 3 published seasons, a new `` tag can be put in the channel to later be matched up with a `4` -tag when it is published within a new ``. +If the `season` attribute is present, it must be a number that matches the format of the `` tag. So, for a podcast that has 3 published seasons, a new `` tag can +be put in the channel to later be matched up with a `4` tag when it is published within a new ``. #### Examples ```xml @@ -313,53 +369,59 @@ tag when it is published within a new ``. 4 ``` -

+

## License -`` +``

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 what this tag is intended to accomplish. -#### Parent -`` or `` +### Parent +  `` or `` -#### Count -Single +### Count +  Single -#### Node Value -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. +### Node Value +  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. -#### Attributes +### Attributes - **url:** (optional) This is a url that points to the full, legal language of the license being referenced. This attribute is optional for well-known public licenses. For new, or custom licenses it is required. -#### Examples -`cc-by-4.0` +### Examples +```xml +cc-by-4.0 +``` -`my-podcast-license-v1` +```xml +my-podcast-license-v1 +```

+ +

## Alternate Enclosure -`` +``

This element is meant to provide different versions of, or companion media to the main `` 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 fuller understanding of how this tag works and what it is capable of. -#### Parent -`` +### Parent +  `` -#### Count -Multiple +### Count +  Multiple -#### Node Value -The node value must be one or more `` elements that each define a uri where the media file can be downloaded or streamed. A single, optional `` element may also be included +### Node Value +  The node value must be one or more `` elements that each define a uri where the media file can be downloaded or streamed. A single, optional `` element may also be included to allow for file integrity checking. -#### Attributes +### Attributes - **type:** (required) Mime type of the media asset. - **length:** (required) Length of the file in bytes. - **bitrate:** (optional) Encoding bitrate of media asset. @@ -370,7 +432,7 @@ to allow for file integrity checking. - **codecs:** (optional) An [RFC 6381](https://tools.ietf.org/html/rfc6381) string specifying the codecs available in this media. - **default:** (optional) Boolean specifying whether or not the given media is the same as the file from the enclosure element and should be the preferred media element. The primary reason to set this is to offer alternative transports for the enclosure. If not set, this should be assumed to be false. -#### Examples +### Examples ```xml @@ -414,25 +476,24 @@ to allow for file integrity checking.

+ +

## Source -`` +``

This element defines a uri location for a `` media file. It is meant to be used as a child of the `` element. At least one `` element must be present within every `` element. -#### Parent -`` +### Parent +  `` -#### Count -Multiple +### Count +  Multiple -#### Node Value -None - -#### Attributes +### Attributes - **uri:** (required) This is the uri where the media file resides. - **contentType:** (optional) This is a string that declares the mime-type of the file. It is useful if the transport mechanism is different than the file being delivered, as is the case with a torrents. -#### Examples +### Examples ```xml @@ -442,28 +503,25 @@ None ``` -

+

## Integrity -`` +``

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 `` element. It allows to ensure that the file has not been tampered with. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Node Value -None - -#### Attributes +### Attributes - **type:** (required) Type of integrity, either "sri" or "pgp-signature". - **value:** (required) Value of the sri string or base64 encoded pgp signature. -#### Examples +### Examples ```xml @@ -472,11 +530,11 @@ None ``` -

+

## Guid -`` +``

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. @@ -488,51 +546,48 @@ Using this pattern, podcasts can maintain a consistent identity across the open **Tips:** A GUID is 36 characters long. All podcasts in the Podcast Index have already been assigned a GUID; but if one exists in the RSS feed, that value is canonical. -#### Parent -`` +### Parent +  `` -#### Count -Single +### Count +  Single -#### Node Value -The node value is a UUIDv5 string. +### Node Value +  The node value is a UUIDv5 string. -#### Attributes -There are no attributes for this tag. +### Attributes +  There are no attributes for this tag. -#### Examples +### Examples Example GUID for feed url `mp3s.nashownotes.com/pc20rss.xml`: - ```xml 917393e3-1b1e-5cef-ace4-edaa54e1f810 ``` Example GUID for feed url `podnews.net/rss`: - ```xml 9b024349-ccf0-5f69-a609-6b82873eab3c ``` -#### Guid-enabled fast-follow share links +### Guid-enabled fast-follow share links -The `podcast:guid` value above enables podcasters to produce a link that can share a podcast on a variety of different platforms. +  The `podcast:guid` value above enables podcasters to produce a link that can share a podcast on a variety of different platforms. -The format of the link is `https://(a podcast website link)#fastfollow-(type):(a podcast guid)` +  The format of the link is `https://(a podcast website link)#fastfollow-(type):(a podcast guid)` -`type` is currently `podcast`, but may be extended in future. +  `type` is currently `podcast`, but may be extended in future. -A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609-6b82873eab3c or the QR code given below. +  A working example is https://podnews.net/podcast/i8xe9/listen#fastfollow-podcast:9b024349-ccf0-5f69-a609-6b82873eab3c or the QR code given below. -![podnews-qr](https://user-images.githubusercontent.com/231941/127796108-d819de43-6c0e-4c7b-9579-ed1f19989443.png) +  ![podnews-qr](https://user-images.githubusercontent.com/231941/127796108-d819de43-6c0e-4c7b-9579-ed1f19989443.png) -When scanned on a mobile phone's camera app, this link will go to the specified podcast website. Behavior of this website is up to the creator: some may use a default homepage, others may sniff the useragent and open a default podcast app on a device. In the working example, above, an iPhone user may be taken to Apple Podcasts; an Android user may be taken to Google Podcasts; and another device will be given a page with a player. +  When scanned on a mobile phone's camera app, this link will go to the specified podcast website. Behavior of this website is up to the creator: some may use a default homepage, others may sniff the useragent and open a default podcast app on a device. In the working example, above, an iPhone user may be taken to Apple Podcasts; an Android user may be taken to Google Podcasts; and another device will be given a page with a player. -When scanned on a QR code reader inside a podcast app, like [CurioCaster](https://curiocaster.com/), the app can parse the `podcast:guid` value from the URL, allowing the podcast to be opened within the application. +  When scanned on a QR code reader inside a podcast app, like [CurioCaster](https://curiocaster.com/), the app can parse the `podcast:guid` value from the URL, allowing the podcast to be opened within the application. -

- +

## Value ``

This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. @@ -568,8 +623,9 @@ this tag works and what it is capable of.

+

## Value Recipient -``
+``

The `valueRecipient` tag designates various destinations for payments to be sent to during consumption of the enclosed media. Each recipient is considered to receive a "split" of the total payment according to the number of shares given in the `split` attribute. @@ -581,10 +637,10 @@ This is a complex tag, so implementors are HIGHLY encouraged to read the compani this tag works and what it is capable of. ### Parent -`` +  `` ### Count -Multiple +  Multiple ### Attributes - **name** (recommended) A free-form string that designates who or what this recipient is. From 506735379e9ad6c7ff910a304f932d4194389b51 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 10:51:28 -0500 Subject: [PATCH 29/42] spacing --- docs/1.0.md | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/docs/1.0.md b/docs/1.0.md index bdc8a9b..a16aab0 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -15,7 +15,7 @@ Anywhere the url of a hyper-text based resource is specified, it must be given a -

+



## Transcript ``

This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats. @@ -56,7 +56,7 @@ Detailed file format information and example files are [here](../transcripts/tra -

+



## Locked ``

This tag may be set to `yes` or `no`. The purpose is to tell other podcast platforms whether they are allowed to import this feed. A value of `yes` means that any attempt to import this feed into a new platform should be rejected. @@ -84,7 +84,7 @@ This tag may be set to `yes` or `no`. The purpose is to tell other podcast platf -

+



## Funding ``

This tag lists possible donation/funding links for the podcast. The content of the tag is the recommended string to be used with the link. @@ -113,7 +113,7 @@ truncated by aggregators. -

+



## Chapters ``

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) @@ -136,7 +136,7 @@ file for a description of the chapter file syntax. And, see the [example.json](h -

+



## Soundbite ``

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 @@ -167,7 +167,7 @@ for the node value or it may be truncated by aggregators. -

+



## Person ``

This element specifies a person of interest to the podcast. It is primarily intended to identify people like hosts, co-hosts and guests. Although, it is flexible enough to allow fuller credits to be @@ -215,7 +215,7 @@ The full taxonomy list is [here](https://github.com/Podcastindex-org/podcast-nam -

+



## Location ``

This tag is intended to describe the location of editorial focus for a podcast's content (i.e. "what place is this podcast about?"). The tag has many use cases and is one of the more complex ones. You @@ -250,7 +250,7 @@ way. This value cannot be blank. Please do not exceed `128 characters` for the -

+



## Season ``

This element allows for identifying which episodes in a podcast are part of a particular "season", with an optional season name attached. @@ -288,7 +288,7 @@ Please do not exceed `128 characters` for the name attribute. -

+



## Episode ``

This element exists largely for compatibility with the `season` tag. But, it also allows for a similar idea to what "name" functions as in that element. @@ -329,7 +329,7 @@ Please do not exceed `32 characters` for the display attribute. -

+



## Trailer ``

This element is used to define the location of an audio or video file to be used as a trailer for the entire podcast or a specific season. There can be more than one trailer present in the channel of the @@ -371,7 +371,7 @@ be put in the channel to later be matched up with a `4
+



## License ``

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 @@ -399,11 +399,9 @@ must be a free form abbreviation of the name of the license as you reference it my-podcast-license-v1 ``` -

- -

+



## Alternate Enclosure ``

This element is meant to provide different versions of, or companion media to the main `` file. This could be an audio only version of a video podcast to allow apps to switch back and forth between audio/video, @@ -473,11 +471,9 @@ to allow for file integrity checking.
``` -

- -

+



## Source ``

This element defines a uri location for a `` media file. It is meant to be used as a child of the `` element. At least one `` element must be @@ -505,7 +501,7 @@ present within every `` element. -

+



## Integrity ``

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 @@ -532,7 +528,7 @@ This element defines a method of verifying integrity of the media given either a -

+



## Guid ``

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 @@ -587,7 +583,7 @@ Example GUID for feed url `podnews.net/rss`: -

+



## Value ``

This element designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. @@ -620,10 +616,9 @@ this tag works and what it is capable of. >
``` -

-

+



## Value Recipient ``

The `valueRecipient` tag designates various destinations for payments to be sent to during consumption of the enclosed media. Each recipient is considered to receive a "split" of the total payment according to the number of shares given From a1c3442bcc496365afe70bfe7a29dca6a5dff5bd Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 11:11:57 -0500 Subject: [PATCH 30/42] credits --- value/value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/value/value.md b/value/value.md index 39be43a..ad4362c 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,6 @@ # The "podcast:value" Specification -Version 1.4 by [@daveajones](https://github.com/daveajones), [@dergigi](https://github.com/dergigi) - 2021.09.01 +Version 1.4 by [Dave Jones](https://github.com/daveajones), with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) and [Paul Itoi](https://github.com/pitoi) - 2021.09.01
From a3bcc502147d496724f21d69dbd0aba8c9a74d43 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 11:13:02 -0500 Subject: [PATCH 31/42] credits --- value/value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/value/value.md b/value/value.md index ad4362c..b17a2b5 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,6 @@ # The "podcast:value" Specification -Version 1.4 by [Dave Jones](https://github.com/daveajones), with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) and [Paul Itoi](https://github.com/pitoi) - 2021.09.01 +Version 1.4 (2021.09.01) by [Dave Jones](https://github.com/daveajones) - with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) and [Paul Itoi](https://github.com/pitoi) -
From 0819b3d2082376e860cd108951798a80452a504d Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 2 Sep 2021 11:14:27 -0500 Subject: [PATCH 32/42] credits --- value/value.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/value/value.md b/value/value.md index b17a2b5..ab72144 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,7 @@ # The "podcast:value" Specification -Version 1.4 (2021.09.01) by [Dave Jones](https://github.com/daveajones) - with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) and [Paul Itoi](https://github.com/pitoi) - +Version 1.4 by [Dave Jones](https://github.com/daveajones) - with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) & [Paul Itoi](https://github.com/pitoi)
+September 1st, 2021
From e2732bb4d6abe58d0da0fd4c590cdd6a6090cbcc Mon Sep 17 00:00:00 2001 From: carlosescura Date: Fri, 10 Sep 2021 17:05:38 +0200 Subject: [PATCH 33/42] add RSS.com Funding --- docs/element-support.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/element-support.md b/docs/element-support.md index ad66f95..60cf014 100644 --- a/docs/element-support.md +++ b/docs/element-support.md @@ -42,6 +42,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti 11. [Hypercatcher](https://hypercatcher.com) 12. [Podlove Podcast Publisher](https://github.com/podlove/podlove-publisher/releases/tag/3.3.1) 13. [Podcat](https://twitter.com/podlove_org/status/1363586304643133442) +14. [RSS.com Podcasting](https://rss.com) ## Chapters `` 1. [Podcast Chapters](https://chaptersapp.com/faq/jsonExport.html) From 01bc406e89d81561d17b187a760a281939d851fa Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Tue, 14 Sep 2021 13:43:35 -0500 Subject: [PATCH 34/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2ac882e..b686cbd 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ will become the framework that the independent podcast community needs to delive Our guiding principles for development of this namespace are the "[Rules for Standards Makers](http://scripting.com/2017/05/09/rulesForStandardsmakers.html)" by Dave Winer. Please read it before contributing if you aren't familiar with it. +The podcast namespace is part of the larger "Podcasting 2.0" project which exists to bring control of podcasting's protocols back into the hands of the open podcasting community. A good overview can be found here: [Podcasting 2.0](podcasting2.0.md) * [Official XMLNS Definition](docs/1.0.md) the official definition of all formalized tags. * List of platforms and apps that currently implement some or all of these tags: [Supporting Platforms and Apps](docs/element-support.md). From a2207e92c6e5e6203bff372e5db2ba24df750cce Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Tue, 14 Sep 2021 13:44:21 -0500 Subject: [PATCH 35/42] Update podcasting2.0.md --- podcasting2.0.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/podcasting2.0.md b/podcasting2.0.md index e27361b..6179370 100644 --- a/podcasting2.0.md +++ b/podcasting2.0.md @@ -14,6 +14,8 @@ Stated eloquently, the aim of Podcasting 2.0 is this: > --Tom Rossi [Tom Rossi](https://podcastindex.social/@tomrossi7/105839063781381384) +
+ Closed ecosystems can not innovate any better or faster than open systems. We should know this by now. The open world of RSS based podcasting can not only keep pace with closed systems, it can exceed them easily. Podcasting 2.0 is simply the technological expression of this idea. We can make a better podcasting experience for listeners than they can get behind any walled garden - no matter how high or expensive those walls are. From 54876f463c944f2b0f022b81227a02158966534c Mon Sep 17 00:00:00 2001 From: Mitch Downey Date: Wed, 15 Sep 2021 14:52:46 -0500 Subject: [PATCH 36/42] Revise soundbite proposal spec to leave title field blank if the podcaster does not provide a value --- docs/1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/1.0.md b/docs/1.0.md index a16aab0..35ad92a 100644 --- a/docs/1.0.md +++ b/docs/1.0.md @@ -149,7 +149,7 @@ audio/video source of the soundbite is the audio/video given in the item's ` Date: Wed, 22 Sep 2021 15:24:45 -0500 Subject: [PATCH 37/42] medium update --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b686cbd..d53ec26 100644 --- a/README.md +++ b/README.md @@ -287,9 +287,15 @@ justification to be added to this list. One may argue and/or prove use of a new - `video` - Like a "podcast" but used in a more visual experience - *Justification*: Videos add different enough level of user experience to discern them from regular podcasts. Sites like YouTube already exist and prove out the existence of "videos" as a medium. - `film` - Specific types of videos with one item per feed. - - *Justification*: While doable, users have come to expect to be able to search for films without directly subscribing to a high level organization of "channels." This allows the application to make beneficial assumptions regarding how to handle an item within a film. Films exist as a medium already with dedicated applications today. + - *Justification*: While doable, users have come to expect to be able to search for films without directly subscribing to a high level organization of "channels." This allows the application to make + beneficial assumptions regarding how to handle an item within a film. Films exist as a medium already with dedicated applications today. - `audiobook` - Specific types of audio with one item per feed. - - *Justification*: Similar to a film, users typically search for audiobooks by name without some level of subscription/following. This isn't to say that an application couldn't allow following an "author," for example, but that wouldn't be organized at the channel level. Audiobooks exist as a medium already with dedicated applications today. + - *Justification*: Similar to a film, users typically search for audiobooks by name without some level of subscription/following. This isn't to say that an application couldn't allow following an "author" + for example, but that wouldn't be organized at the channel level. Audiobooks exist as a medium already with dedicated applications today. +- `newsletter` - Describes a feed of curated written articles + - *Justification*: Many newsletter publications already have RSS feeds -- this helps explicitly identify them. +- `blog` - Describes a feed of informal written articles + - *Justification*: Many blogs already have RSS feeds, perhaps since the dawn of RSS -- this helps explicitly identify them. Example use for a "podcast": ```xml From a0eb88009fdd15d8db3a8a3a6ced9c8209a2dcbd Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Wed, 22 Sep 2021 15:31:05 -0500 Subject: [PATCH 38/42] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d53ec26..c1a033d 100644 --- a/README.md +++ b/README.md @@ -284,17 +284,17 @@ justification to be added to this list. One may argue and/or prove use of a new - *Justification*: Nothing new, as this is what all podcasts that exist default to today. If no `medium` tag is present in the channel, this medium is assumed. - `music` - A feed of music organized into an "album" with each item a song within the album. - *Justification*: Music has existed as a medium for a very long time and dedicated music applications already exist. -- `video` - Like a "podcast" but used in a more visual experience +- `video` - Like a "podcast" but used in a more visual experience. - *Justification*: Videos add different enough level of user experience to discern them from regular podcasts. Sites like YouTube already exist and prove out the existence of "videos" as a medium. - `film` - Specific types of videos with one item per feed. - *Justification*: While doable, users have come to expect to be able to search for films without directly subscribing to a high level organization of "channels." This allows the application to make beneficial assumptions regarding how to handle an item within a film. Films exist as a medium already with dedicated applications today. - `audiobook` - Specific types of audio with one item per feed. - - *Justification*: Similar to a film, users typically search for audiobooks by name without some level of subscription/following. This isn't to say that an application couldn't allow following an "author" + - *Justification*: Similar to a film, users typically search for audiobooks by name without some level of subscription/following. This isn't to say that an application couldn't allow following an "author". for example, but that wouldn't be organized at the channel level. Audiobooks exist as a medium already with dedicated applications today. -- `newsletter` - Describes a feed of curated written articles +- `newsletter` - Describes a feed of curated written articles. - *Justification*: Many newsletter publications already have RSS feeds -- this helps explicitly identify them. -- `blog` - Describes a feed of informal written articles +- `blog` - Describes a feed of informally written articles. - *Justification*: Many blogs already have RSS feeds, perhaps since the dawn of RSS -- this helps explicitly identify them. Example use for a "podcast": From c63d3e982c5310cab7614e9b670931e2f083007e Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Sat, 2 Oct 2021 14:32:41 +0200 Subject: [PATCH 39/42] draft --- docs/other-recommendations.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/other-recommendations.md b/docs/other-recommendations.md index 6f34c4c..fe666eb 100644 --- a/docs/other-recommendations.md +++ b/docs/other-recommendations.md @@ -9,10 +9,10 @@ For all new episodes, we recommended to use * either a permanent URI, e.g. `https://example.com/ep0003` * or a [Universally unique identifier (UUID)](https://en.wikipedia.org/wiki/Universally_unique_identifier) e.g. `7c029615-a810-5214-9342-eee73f58435d` -The GUID of an episode should never change, even if a new version of the epsiode is being published, otherwise this episode will be duplicated downstream. This also means that +The GUID of an episode should never change, even if a new version of the epsiode is being published, otherwise this episode will be duplicated downstream. -Consumers of podcast feeds should fall back to the enclosure URL or the namespaced UUIDv5 (SHA1 Hash with ns:URL) of the enclosure URL. +Consumers of podcast feeds should fall back to the enclosure URL or the namespaced UUIDv5 (SHA1 Hash with ns:URL) of the enclosure URL, if the value is not set – see https://github.com/Podcastindex-org/podcast-namespace/issues/186#issuecomment-932742468 for more details. From 50cdaae1d2146690ba0e5cdcd78e8cfd9e9a7d28 Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Sat, 2 Oct 2021 14:34:30 +0200 Subject: [PATCH 40/42] fix typo --- docs/other-recommendations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/other-recommendations.md b/docs/other-recommendations.md index fe666eb..7392110 100644 --- a/docs/other-recommendations.md +++ b/docs/other-recommendations.md @@ -9,7 +9,7 @@ For all new episodes, we recommended to use * either a permanent URI, e.g. `https://example.com/ep0003` * or a [Universally unique identifier (UUID)](https://en.wikipedia.org/wiki/Universally_unique_identifier) e.g. `7c029615-a810-5214-9342-eee73f58435d` -The GUID of an episode should never change, even if a new version of the epsiode is being published, otherwise this episode will be duplicated downstream. +The GUID of an episode should never change, even if a new version of the episode is being published, otherwise this episode will be duplicated downstream. Consumers of podcast feeds should fall back to the enclosure URL or the namespaced UUIDv5 (SHA1 Hash with ns:URL) of the enclosure URL, if the value is not set – see https://github.com/Podcastindex-org/podcast-namespace/issues/186#issuecomment-932742468 for more details. From 1611d28eb63a55810ce1815d8ca3f78789199b44 Mon Sep 17 00:00:00 2001 From: Gigi <109058+dergigi@users.noreply.github.com> Date: Tue, 5 Oct 2021 22:21:47 +0200 Subject: [PATCH 41/42] Fix name GiGi -> Gigi --- value/value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/value/value.md b/value/value.md index ab72144..df4be9f 100644 --- a/value/value.md +++ b/value/value.md @@ -1,6 +1,6 @@ # The "podcast:value" Specification -Version 1.4 by [Dave Jones](https://github.com/daveajones) - with [GiGi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) & [Paul Itoi](https://github.com/pitoi)
+Version 1.4 by [Dave Jones](https://github.com/daveajones) - with [Gigi](https://github.com/dergigi), [Evan Feenstra](https://github.com/evanfeenstra) & [Paul Itoi](https://github.com/pitoi)
September 1st, 2021
From eafaea7e3cbb4772a8e71cae75d4d750f636863c Mon Sep 17 00:00:00 2001 From: Guilherme Dellagustin Date: Wed, 6 Oct 2021 00:07:31 +0200 Subject: [PATCH 42/42] Update element-support.md Added Omny Studio support for transcription. --- docs/element-support.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/element-support.md b/docs/element-support.md index 60cf014..08ec02e 100644 --- a/docs/element-support.md +++ b/docs/element-support.md @@ -15,6 +15,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti 8. [PodcastGuru](https://twitter.com/podcastguru_app/status/1362902472793223169) 9. [Podlove Podcast Publisher](https://github.com/podlove/podlove-publisher/commit/d3ce9d117c57a4c864d982fb5451c3fb6d20bd91) 10. [PodServe.fm](https://www.podserve.fm) +11. [Omny Studio](https://blog.omnystudio.com/are-transcriptions-the-building-blocks-for-the-future-of-audio-distribution-464e653c2668) ## Locked ``