Podcastindex-org / podcast-namespace

A wholistic rss namespace for podcasting
Creative Commons Zero v1.0 Universal
380 stars 113 forks source link

Proposal: <podcast:guid> #251

Closed daveajones closed 2 years ago

daveajones commented 3 years ago

Here is a proposal for a GUID tag to uniquely identify podcasts with a url derived hash value that tracks with the podcast across subsequent hosting provider changes.


\


<podcast:guid>[UUIDv5(string)]</podcast:guid>

Channel

(optional | single)

This element lives in the <channel> and is used to declare a unique, universal identifier for this podcast. The value is easily generated from the RSS feed url (with the protocol scheme and trailing slashes stripped off) of the podcast combined with a unique "podcast" namespace which has a UUID of ead4c236-bf58-58c6-a2c6-a6b28d128cb6 . Tools like this one can help generate these values by hand. And, language libraries like this one in Ruby are widely available.

A podcast gets assigned a once in it's lifetime using it's current feed url (at time of assignment) as the seed value. That GUID is then meant to follow the podcast from then on, for the duration of it's lifetime, even if the feed url changes. This means that when a podcast moves from one hosting platform to another, it's should be discovered and imported into the new platform for inclusion into the feed.

Example GUID for the Podcasting 2.0 podcast (feed url: mp3s.nashownotes.com/pc20rss.xml):

<podcast:guid>917393e3-1b1e-5cef-ace4-edaa54e1f810</podcast:guid>

Example GUID for the Podnews podcast (feed url: podnews.net/rss):

<podcast:guid>9b024349-ccf0-5f69-a609-6b82873eab3c</podcast:guid>
jamescridland commented 3 years ago

The Podnews feed now includes this guid - https://podnews.net/rss

Podnews produces other feeds for other services, like https://podnews.net/rss/exampleapp - this retains the canonical GUID as above, since the podcast content is the same.

Here's a PHP library.

agates commented 3 years ago

Here's the documentation for python's built-in uuid library:

https://docs.python.org/3/library/uuid.html#uuid.uuid5

Example for Podcasting 2.0:

from uuid import UUID, uuid5

PODCAST_NAMESPACE_UUID = UUID('{ead4c236-bf58-58c6-a2c6-a6b28d128cb6}')

uuid5(PODCAST_NAMESPACE_UUID, "mp3s.nashownotes.com/pc20rss.xml")

# output: UUID('917393e3-1b1e-5cef-ace4-edaa54e1f810')
francosolerio commented 3 years ago

The idea of a GUID tag is very interesting. I had an interesting discussion about the same topic with Manton Reece when he published the first version of JSON Feed.

Unique ID for feed #10

The issue that comes to my mind is this: if the GUID is programmatically derived from the feed URL, there is a strong possibility that when a user moves his feed to a new url, or a new platform, a new GUID is generated. So the old and new feeds would result as two different podcasts, making the podcast:guid tag useless.

PofMagicfingers commented 3 years ago

Yeah the idea behind this tag (though it has not been discussed in this issue but inside #243 and #240), is to move WITH it. When you import your feed into a new host, it should retain the original feed guid

brianoflondon commented 3 years ago

We need this.

saerdnaer commented 3 years ago

@daveajones Why not add this to phase 3?

daveajones commented 3 years ago

@daveajones Why not add this to phase 3?

Well, it was pretty sudden. Felt like we needed a longer comment period. But maybe we don’t?

saerdnaer commented 3 years ago

In my opinion we had the discussion in so many other issues, c.f. https://github.com/Podcastindex-org/podcast-namespace/issues/251#issuecomment-844083592 – the proposal at it is now is so simple and elegant that you should simply add it. :-)

daveajones commented 3 years ago

Makes sense to me.

jamescridland commented 3 years ago

This looks good, and I've already proposed it to a podcast aggregator as their canonical GUID system, to answer this use-case:

I run a podcast aggregator. I'd like to link to BigCorp's podcast app's page for this podcast. Can I get that URL, please, via an API looking like https://bigcorp.example.com/api/lookup?guid=9b024349-ccf0-5f69-a609-6b82873eab3c which would return something with a URL to https://bigcorp.example.com/podcast/2854629234 where that's their own system ID.

So that's:

It would be great to get this finalised.

yoshimo commented 3 years ago

Could we use these unique identifiesr on episode level instead of feed wide level so that a network wide feed with multiple shows can be separated into its individual shows?

jamescridland commented 3 years ago

Sounds like your use case is answered by channels or collections.

On Wed, 9 Jun 2021 at 17:49, yoshimo @.***> wrote:

Could we use these unique identifiesr on episode level instead of feed wide level so that a network wide feed with multiple shows can be separated into its individual shows?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Podcastindex-org/podcast-namespace/issues/251#issuecomment-857470819, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABYUBNIPKDNJUCOBLDHEFDTR4MIHANCNFSM442WWF2Q .

-- Tel/SMS/Signal: +61 447 692743 my calendar https://james.cridland.net/lets-chat · my timezone https://www.google.com/search?q=time+in+brisbane · speaking and consultancy https://james.cridland.net

Editor, the Podnews Network [image: Podnews] https://podnews.net/latest [image: Sounds Profitable] https://soundsprofitable.com/latest [image: Podjobs] https://podjobs.net/ [image: Podevents] https://pod.events/

Amazingly Brilliant Pty Ltd · ABN 30 612 913 514

daveajones commented 3 years ago

This looks good, and I've already proposed it to a podcast aggregator as their canonical GUID system, to answer this use-case:

I run a podcast aggregator. I'd like to link to BigCorp's podcast app's page for this podcast. Can I get that URL, please, via an API looking like https://bigcorp.example.com/api/lookup?guid=9b024349-ccf0-5f69-a609-6b82873eab3c which would return something with a URL to https://bigcorp.example.com/podcast/2854629234 where that's their own system ID.

So that's:

  • Use the podcast:guid in the RSS feed if it exists
  • If not, calculate a podcast:guid from the current RSS feed URL. This isn't perfect, since it'll change with different hosts, but is a good start

It would be great to get this finalised.

I think we can finalize this now. I'll work it up.

daveajones commented 3 years ago

I just added a paragraph about how the GUID, once assigned, should be permanent and follow the podcast around forever after.

agates commented 3 years ago

Reference for historical discussion: https://github.com/Podcastindex-org/podping.cloud/issues/1

saerdnaer commented 2 years ago

@daveajones I think we can resolve (close) this issue as it's documented at https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid