Skip to content

Commit

Permalink
Merge branch 'main' into patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
koczadly authored Nov 8, 2021
2 parents 5771efe + e91fba6 commit c6b3115
Show file tree
Hide file tree
Showing 8 changed files with 272 additions and 48 deletions.
11 changes: 9 additions & 2 deletions chapters/exampleComplex.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,21 @@
"startTime": 410,
"title": "Namespace",
"img": "https://example.com/images/namepsace_example.jpg",
"url": "https://github.com/Podcastindex-org/podcast-namespace"
"url": "https://github.com/Podcastindex-org/podcast-namespace",
},
{
"startTime": 3990,
"title": "Just Break Up",
"img": "https://example.com/images/justbreakuppod.png",
"url": "https://twitter.com/justbreakuppod"
},
{
"startTime": 4200,
"title": "Played song by artist",
"img": "https://i.discogs.com/R-249504-1334592212.jpeg?bucket=discogs-images&fit=contain&format=auto&height=600&quality=90&width=600&signature=wMI9I0mHkbVxkkryQrN1JkkzhwFsrereuom9Lmfa92w%3D",
"url": "https://www.discogs.com/Rick-Astley-Never-Gonna-Give-You-Up/master/96559"
"value": "<podcast:value type=\"lightning\" method=\"keysend\" suggested=\"0.00000005000\"><podcast:valueRecipient name=\"Performing Artist\" type=\"node\" address=\"03c457fafbc8b91b462ef0b8f61d4fd96577a4b58c18b50e59621fd0f41a8ae1a4\" split=\"100\"/></podcast:value>"
},
{
"startTime": 4600,
"title": "Donations",
Expand Down Expand Up @@ -57,4 +64,4 @@
"title": "Outro"
}
]
}
}
23 changes: 14 additions & 9 deletions docs/1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,9 @@ truncated by aggregators.
<br><br><br><br><!-- Tag block -->
## Chapters
`<podcast:chapters>`<br><br>
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md)
file for a description of the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.
Links to an external file (see example file) containing chapter data for the episode. See the [jsonChapters.md](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md) file for a description of the chapter file syntax. And, see the [example.json](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/example.json) example file for a real world example.

Benefits with this approach are that chapters do not require altering audio files, and the chapters can be edited after publishing, since they are a separate file that can be requested on playback (or cached with download). JSON chapter information also allows chapters to be displayed by a wider range of playback tools, including web browsers (which typically have no access to ID3 tags), thus greatly simplifying chapter support; and images can be retrieved on playback, rather than bloating the filesize of the audio. The data held is compatible with normal ID3 tags, thus requiring no additional work for the publisher.

### Parent
&nbsp; `<item>`
Expand Down Expand Up @@ -531,16 +532,20 @@ This element defines a method of verifying integrity of the media given either a
<br><br><br><br><!-- Tag block -->
## Guid
`<podcast:guid>`<br><br>
This element is used to declare a unique, global identifier for a podcast. The value is a UUIDv5, and is easily generated from the RSS feed url, with the **protocol scheme and trailing slashes stripped off**, combined with a unique "podcast" namespace
which has a UUID of `ead4c236-bf58-58c6-a2c6-a6b28d128cb6`. Tools like [this one](https://www.uuidtools.com/v5) can help generate these values by hand. Or, language libraries like [this one](https://github.com/sporkmonger/uuidtools) in Ruby are widely
available.
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.

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

Using this pattern, podcasts can maintain a consistent identity across the open RSS ecosystem without a central authority.

**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.
**Tips:**
* All podcasts in the Podcast Index have already been assigned a GUID; but if one exists in the RSS feed, that value is canonical.
* You can programmatically spot a GUID: it is 36 characters long, and contains four hyphen characters.
* Be aware that Amazon Music also uses separate UUIDv5 identifiers within their podcast directory, which are calculated differently and unrelated to this specification.
* The following regular expression (regex) will match a GUID:
```re
[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}`
```
### Parent
&nbsp; `<channel>`
Expand Down Expand Up @@ -675,4 +680,4 @@ this tag works and what it is capable of.
fee="true"
/>
</podcast:value>
```
```
2 changes: 2 additions & 0 deletions docs/element-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
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)
15. [Anytime Podcast Player](https://play.google.com/store/apps/details?id=uk.me.amugofjava.anytime)

## Chapters `<podcast:chapters>`
1. [Podcast Chapters](https://chaptersapp.com/faq/jsonExport.html)
Expand All @@ -58,6 +59,7 @@ For elements that are included in the official [DTD](https://github.com/Podcasti
10. [PodServe.fm](https://www.podserve.fm)
11. [JustCast.com](https://twitter.com/thejustcast/status/1420783756156145664)
12. [RSS.com Podcasting](https://rss.com)
13. [Anytime Podcast Player](https://play.google.com/store/apps/details?id=uk.me.amugofjava.anytime)

## Soundbites `<podcast:soundbite>`
1. [Buzzsprout](https://www.buzzsprout.com)
Expand Down
78 changes: 78 additions & 0 deletions letters/letter-to-apple.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# An Open Letter to Apple

> Please leave a comment and I'll invite you and give you edit power - Brian
[![hackmd-github-sync-badge](https://hackmd.io/x-EFQGinSrCquuV-KYn72A/badge)](https://hackmd.io/x-EFQGinSrCquuV-KYn72A)


Signatories:
## Adam Curry - The Podfather
### Co-inventor of Podcasting.

## Podcasting 2.0
Dave Jones
Everybody else
Brian of London

EARLY DRAFT v1.0

## What we're asking from Apple

1. **Podcast Linking**: allow iOS and Mac users to select their own choice of 3rd party Podcast playing app for links to podcasts. We have a standardised schema and a range of apps, which have adopted it. We would love to see the Apple Podcast app also recognise this standard way of linking to episodes of podcasts.
2. **Use Podping**: We would be delighted to see Apple start using the free to use instant notification system Podping. This would dramatically reduce the number and frequency of checks on RSS feeds which Apple makes 24x7 to keep Apple's index up to date.
3. **Appoint a dedicated Podcasting 2.0 Liason**: We'd love to see Apple recognise the vibrant Podcasting 2.0 development community and **engage with us** making everything better for everyone involved in Podcasting! This largely grass roots and direct form of communication is one of the most vibrant parts of the Internet and we want to keep it growing.


## Background

Adam writes: "Back in 2005 I was called to a meeting with Steve Jobs. He asked me if it would be OK to put Podcasts directly into the software for the iPod: iTunes on the Mac.

This meeting followed a number of years of open source development which built the fledgling Podcasting industry. That effort had built production tools, distribution systems and podcast player software. We had our own Index which, following that meeting with Steve Jobs, I entrusted to Apple."

Many years later, through which Podcasting grew into a thriving industry all of its own, Apple still holds a special place with it's Index of shows and free to use API.

Today Apple maintains a large market dominance on its own iOS platform with the built in Podcasting App. But there is healthy competition from a range of apps produced by billion dollar companies right down to single person startups. All these apps compete on iOS and Google's Android and there is room for all of them.

## Podcast Linking

There is an important element missing, however, especially on iOS. The ability to share a link to a Podcast or epsiode of a show and have it open in the user's preferred application.

This choice is available on Google's Android system. We've recently seen search engine choice, browser choice and choice of email client added to iOS. We'd like to see Podcast App choice be added too.

Podcast listening is deeply personal. Podcast listeners have strong emotional ties to the content they follow and often to the apps they use. Podcasts are also deeply affected by word of mouth sharing and link sharing needs to be easier.

### Competition

All over the world, from Europe to Australia and the USA, competition authorities are looking very carefully at every aspect of big tech.

The browser wars of the 90's have carried into the heavy discussions today around mobile app store policies. Something as simple as reducing barriers to user's chosing a new primary Podcast App can only be seen as a win and encouraging of competition and choice for your customers.

## Podping

The diverse team of open source developers and Podcast lovers who have worked together under the Podcast Index stewardship have developed a revolutionary notification system for new podcast episode notifications.

**Podping** replaces energy wasteful, repetetive polling of millions of RSS feeds with an elegent blockchain based notification system.

Apple would need little more than a single Raspberry Pi, watching the stream of Podpings shared over the open source Hive blockchain. That could replace hundreds of energey burning servers Apple maintains today.

This one computer would notify Apple of every new episode within seconds of it being published and only then would Apple need to fetch the updated RSS feed and index its new content.

Podping is currently being used by the following podcast hosts and the *podpings* are picked up and used by PodcastIndex and a number of other apps:

- Buzzsprout.com
- Transistor.fm
- rss.com
- Captivate.fm
- podserve.fm
- 3speak.tv
- podnews.net

[You can "watch" Podping right now in the browser](https://podping.watch/), every new episode from any of these hosts will appear here and this can run in your browser, no need to check 100's of 1,000's of RSS feeds every hour!

With Apple on board and using Podping to provide much faster and more energy efficient updates of podcasts to millions of iOS devices, we are sure that the rest of the Podcast hosting companies would join.

## One More Thing

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

We know Apple has been passionate about Podcasting for almost as long as we have, we would love to collaborate further and see Apple adopt some of the innovations our teams come up with! Please get in touch with Adam directly and lets work together on making Podcasting even better.
2 changes: 2 additions & 0 deletions podcasting2.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ Because of these issues, we've created a way to receive cryptocurrency payments
- [Podverse](https://podverse.fm)
- [podStation](https://podstation.github.io)
- [Sphinx.chat](https://sphinx.chat)
- [Castamatic](https://castamatic.com)
- [Fountain.fm](https://fountain.fm)

If you can't add the `<podcast:value>` tag to your feed manually, we also have created [a site](https://podcasterwallet.com) that can help you put a value tag directly into the Podcast Index database for your feed. Any apps that use the Podcast Index will see your value tag and be able to stream micropayments to you.

Expand Down
34 changes: 2 additions & 32 deletions proposal-docs/hive-account-name/hive-account-name.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,7 @@


# The "podcast:hiveAccount" Specification
# WITHDRAWN - The "podcast:hiveAccount" Specification

<small>Version 1.0 by Brian of London - 2021.06.08</small>

<br>

## Purpose

Allows for the easy inclusion of a definitive Hive Account to which Value for Value payments can be routed.

## Specification

For the `<podcast:hiveAccount>` tag there are no attributes, the tag just wraps the Hive account name string.

## Example

```xml
<podcast:hiveAccount>no-agenda</podcast:hiveAccount>
```

## More Information

More information about the Hive Blockchain can be found at the [Dev Portal for Hive](https://developers.hive.io/#introduction-welcome)


# Alternate idea (but not quite as good)
## It could be done with FUNDING tag!

<podcast:funding hiveAccname="brianoflondon">Support Brian of London </podcast:funding>

This could even be done via URL, but

<podcast:funding url="https://hive.blog/@brianoflondon">Support Brian of London</podcast:funding>

however that would need to be passed on in the TLV records.
Withdrawn - It's handled better by `customKey` and `customValue` in the [`value block`](value/value.md)
Loading

0 comments on commit c6b3115

Please sign in to comment.