Reverse engineer Spotify Codes (Scannables)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MatthijsZ
  • Registratie: December 2013
  • Laatst online: 27-06 18:43
Spotify heeft een nieuwe feature en ik was benieuwd hoe deze werkt.

Ik ben het nu zelf een beetje aan het reverse-engineeren en heb wat hulp nodig :)

Mijn huidige tactiek is om van een nummer (liedje) de share-url en de Spotify Code aan elkaar te linken.
De aanname daarbij is dat het gaat om dezelfde identifier, maar dat hoeft natuurlijk niet zo te zijn.

De share-url van dit nummer is als volgt: https://open.spotify.com/track/4zj2TfCmxKJ92IwtNWOAaM
Dat laatste stuk is base64-encoded van ASCII: 8M}-5ch
Die code lijkt op een hash. Ik kan alleen geen hash-algoritme vinden van 7 karakters, dus mogelijk is dat een zelf bedacht iets (en dan loop ik natuurlijk vast ;) )

De scannable (Spotify Code) kun je hier zien [2]. Mijn aannames:
- eerste en laatste streepje zijn er om begin/eind aan te geven en als referentie-hoogte en bevatten geen informatie
- informatie zit alleen in de hoogte van de tussenliggende streepjes
- elk streepje representeert een getal in een bepaalde range (er zijn 8 buckets).
- er zijn geen streepjes die gebruikt worden als pariteit

Aanname 2 is gebaseerd op de verdeling van de hoogte van de streepjes [1]. Maar zou niet goed kunnen zijn: het verschil in hoogte is niet consistent, dus er zou extra informatie in kunnen zijn verstopt. Lijkt me echter eerder te komen doordat ik pixels tel :)

Aanname 3 is minder waarschijnlijk. Maar is gebaseerd op onderstaande.

Op basis van de eerste twee aannames zou in de scannable de volgende code zitten (als we buckets beginnen te nummeren op 0):
5 3 2 1 6 5 0 0 6 3 7 7 5 7 7 2 3 5 5 6 5

Dat zijn 21 getallen. De hash heeft 7 karakters, dus drie getallen per karakter.
Er zijn 512 mogelijkheden in dat geval (8^3), dus het zou kunnen.

Aangezien de hash in ASCII lijkt te zijn dacht ik de getallen te kunnen linken aan de waarde in de ASCII tabellen. Maar dat krijg ik niet voor elkaar.

Iemand een idee?

1: https://www.dropbox.com/s...es_van_scannable.png?dl=1
2: https://www.dropbox.com/s...n/scannable-code.png?dl=1

Acties:
  • 0 Henk 'm!

  • StapelPanda
  • Registratie: Februari 2005
  • Laatst online: 07-10 17:43

StapelPanda

PB0MV

Het zou grappig zijn geweest als Spotify inspiratie heeft opgedaan uit de muziekwereld. Bijvoorbeeld door een octaaf te gebruiken, helaas zijn dit 7 noten in plaats van 8. Ook kom je dan nooit op de karakters voor de base64 string.

Helaas zijn de codes nog niet beschikbaar op de web-variant. Daar zou je wellicht uit de URL waardevolle informatie kunnen halen of eenvoudig met een script een reeks van deze codes en waardes op kunnen halen om deze te processen.

Handige link om toe te voegen, is alle data beschikbaar vanuit de API: https://developer.spotify...id=4zj2TfCmxKJ92IwtNWOAaM

[ Voor 14% gewijzigd door StapelPanda op 09-05-2017 16:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Interessant! Ik heb het idee dat je ook nog ergens rekening moet houden met het 'type' wat je wilt delen. Een Spotify URI kan namelijk beginnen met spotify:track: / spotify:album: / spotify:artist: / spotify:playlist.

Waarschijnlijk zit deze informatie ook in de code verwerkt.

Acties:
  • +1 Henk 'm!

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Het laatste deel van de share-url (Spotify ID) is base-62 encoded, niet base-64. Zie ook Spotify URIs and IDs. Het ID 4zj2TfCmxKJ92IwtNWOAaM is dan ook equivalent aan 96237174f9144a3fa9e7d610cfd7205c16, een 128-bits nummer.

[ Voor 3% gewijzigd door Daedalus op 10-05-2017 18:34 ]

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/