Online Music Services should Provide Play/Like history in a Standard format.

 • 

An old man's rant

Back in the day (20 years ago?) when online music services started (after the RIAA lost against MP3 piracy), one of the main features of online music players that you could not play something specific, but could get a mix based on artists that you liked. One of the services that offered this was LastFM (way back in 2002). Additionally you had the ability to "like" the music that you have liked, and "block" any song you didn't; logging every song you played and every other song you skipped.

The problem is... that since that time, there have been a plethora of new services (Rhapsody, Rrdio, Deezer, Pandora, Tidal, Spotify, Google PlayYoutube Music, among several more obscure others), and each of them saves in one way or another your list of played, skipped, loved and hated tracks, over and over. Every one of them think that the way they use your play history to suggest you new songs is the best one; and most likely all of it sucks.

The way I see it, that data should be available for download in an open and standard format. So that you could a) Move it between music services if you like and b) Use any "neutral" third party application (maybe open source?) to analyze your play history and give you insights.

Coming back to LastFM, they tried to do something like that: You can connect a LastFM plugin in some of the services that will send your listened songs to LastFM. The problem is that a) It is not open (you cannot download your history form LastFM in a suitable format) and b) Not all services support it, and c) Once you generate your data in LastFM, you can only listen it there.

Proposal for an Free, Open Music Streaming History Data format

What I am proposing is simple. Come up with a simple JSON (or YAML if we feel brave) standard that allows one to store the behavioural data as you play your music in any service, including things like: "loved this song", "skipped this song after N seconds", "hated this song", etc.

This will give everyone the ability to really own their data, and will open the opportunity to improve recommendation algorithms by third parties (open source or commercial).

The format could be something as simple as this:

listening_history.json 
-------
{
   exportDate: "2022-01-01T20:35Z",
   listenedTracks: [
    {
       artistName: "Metallica",
       albumName:  "Ride the Lightning", 
       trackName:  "For Whom the Bell Tolls",
       durationSeconds: 309,
       playData: {
          playTimeSeconds: 150,
          playScore: 1
       }
    },
    {
       artistName: "Megadeth",
       albumName:  "Youthanasia", 
       trackName:  "Victory",
       durationSeconds: 327,
       playData: {
          playTimeSeconds: 327,
          playScore: -1
       }
    }
 ...
]

All fields are straightforward except maybe playScore, which would be used to capture the "like" and "dislike" buttons across different services (i.e. when someone clicks on a like button, the playScore would be +1; clicking on a "skip/block" button would set the playScore to -1; finally 0 would be a default value for when there's not reaction to the song).