Replies: 4 comments 6 replies
-
There are a few pieces of prior art to think about here: Was my ad heard? NPR's RAD proposal was a set of ID3 tags that essentially said: "when you get to 00:45, send a ping to http://example.com with an ID of 246, please". A RAD-compliant player would send those pings back when it encountered the ID3 tags baked into the audio. This means that you could use RAD to know when a specific ad was played (with dynamic ad insertion), and whether the user skipped that. That fixed the issue with advertisers wanting to have some kind of proof that an ad was played (or not). How many people heard this show/ad? The ULID - a random ID given per episode by an app - would help with getting accurate listener numbers. Currrently, we are identifying listeners by using a unique user-agent plus an IP address; the ULID would enable much better and more accurate data for numbers of listeners. As to The main issue here is the one of privacy. Currently, a podcast player leaks the IP address of the listener only once: when the show is downloaded. If we start letting it contact multiple times during the actual playback of a podcast, that potentially means we're tracking that listener, and potentially might be able to track her to work, understand what route she takes, and how she gets there. IP addresses are useful, but I worry about the privacy implications for continuous pings. (Mind you, we seem perfectly happy with the privacy implications of sending minute-by-minute streaming sats...) |
Beta Was this translation helpful? Give feedback.
-
This kind of thing has been proposed by multiple others (including myself) before. But it seems most app developers are not interested in supporting anything that gives podcasters more information about their audience or how episodes are consumed. That aside, I think the ideal way to do this would be through Activity Streams and ActivityPub, which is still in progress. So if we can get AS/AP figured out, then we can still building things on top of it, like deeper date. |
Beta Was this translation helpful? Give feedback.
-
So if anyone is interested in spinning up their own server for podcast performance I have published the code at https://github.com/podtoo/podcast-performance/tree/main/server You can also test your XML once the server is spinning via https://codepen.io/redimongo/full/BaeQyaP I have also added to the server code the path to fetch your performance percentage via GUID note we check to make sure it's a valid GUID that exists in your episode collection before running the code.
Note you will need HTTPS for the codepen to post to your server. we use Docker containers and then nginx proxies, if anyone needs assistance please just ask happy to help. |
Beta Was this translation helpful? Give feedback.
-
(Coming back to this months later.) While I would still like to see this kind of thing, I think we really need the foundation of podcast ActivityStreams first. That would make building things like this easier additional steps to standardize the activity format and send that to the podcast's ActivityStreams (none of this "user ActivityStreams" stuff). Whether that's through a webhook tag, |
Beta Was this translation helpful? Give feedback.
-
Downloads and stream counts are great, but they don’t tell podcasters the most important information they need. It’s crucial for podcasters to know if their listeners find their content valuable or if there are parts of their podcast that listeners skip or fast forward through.
I’ve been brainstorming a bit, but I’ve hit a wall. I know we can technically achieve this, and we could integrate this type of feature into OP3. Podcast hosting providers could even add an API that allows Podcasting 2.0 apps to send this data back.
The Idea: Spotify has data on how their listeners engage with a podcast episode.
However, we can’t use the range method since Apple sends range=0-1 and then range=0-(end of length of file), which means we can’t do it server-side, at least not for Apple Podcasts or AVKit. I’ve spent two days trying and have hit this small wall.
So, I thought I’d ask the community. I understand some of you might be against this idea, but this is the one analytics tool missing from every podcast hosting company except Spotify.
PodToo embed players already store play count data, play duration, and current duration, so we can do this internally. But unless we can find an open solution, we can only show episode performance data for our own players. We’d love to support every Podcast 2.0 player.
Maybe some ideas:
A new tag?
<podcast:performance url="https://api.DOMAIN.com/episodePerformance" seconds="5"/>
This would allow players who want to send the current play position to submit it to the hosting company. You could even add OP3.dev to the front of that so that OP3 can get the same data before passing it on. (Note just technically it would be possible)
basically you would send to this API the episode GUID and the current play duration, maybe every 3-5 seconds, if a user drags the player say to the middle of the player then a post is sent with that current point.
Example: Say an episode is 1 hour long, I start playing it sends it first post to the api
podcast:performance
url with 1 second, then I drag the progress bar to 30 min it would send another request topodcast:performance
saying00:30:00
with the episode GUID. Then every X seconds it send another request with that so in our case00:30:05
as we store every 5 seconds.Update 31 May 2024 - We have just released Version 1.0.1 of the server code, and also we have the domain https://podcastperformance.com which will be what PodToo uses moving forward.
We have taken into account feedback and advise from @johnspurlock and @jamescridland who both where very vocal about not storing IP addresses (So thank you for making me think outside the box), I am pleased to say that now with us using Token request from the feed server to the performance server there is no need to store anyones IP address. I would suggest storing a cookie on the feed server (client side) as otherwise you'll get a new session token each time the feed loads.
Beta Was this translation helpful? Give feedback.
All reactions