Grooveshark API

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hi,

sorry, dass ich mich jetzt erst melde.
weißned hat geschrieben:Wie hast du denn heraus gefunden, dass das genau so funktioniert? Gib es da eine Dokumentation zu?
Ich habe mir die Kommunikation zwischen dem Grooveshark HTML-Client und dem Server angeguckt und dann nachgebaut.
weißned hat geschrieben:Wäre cool wenn du mir da etwas Hilfestellung geben könntest.
Was willst Du denn genau wissen?
waki hat geschrieben:meinst du mich? ich würde einfach nur gerne den Stream abspielen, was ich jedoch nicht hinbekomme, da die meisten audio-libs eine Datei zum abspielen wollen...
Guck dir mal die Beispiele an, der MPlayer benötigt auch eine Datei.
Du könntest auch GStreamer verwenden, den gibt es glaub ich auch für Windows.
Da kannst Du den Stream direkt abspielen...

Viele Grüße
Maxi
lunar

@maxi_king_333: MPlayer benötigt nicht zwangsläufig eine lokale Datei. Das Programm kann auch Streams abspielen.
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

@lunar: schon, aber ich habe keinen Weg gefunden die Streams aus Python direkt damit abzuspielen... Wenn Du einen kennst immer her damit... ;)
lunar

@maxi_king_333: Du übergibst mplayer einfach die URL des Streams?
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

@lunar: tja, leider muss ich dem Server über POST einen Key übermitteln, sonst streamt der nicht...
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

cooles Programm !! :!:
Find ich klasse und werde es bei Gelegenheit ordentlich studieren.
lunar

@maxi_king_333: Dann lade den Stream in Python herunter und übergebe die Daten blockweise an die Standardeingabe eines MPlayer-Prozesses:

Code: Alles auswählen

with song.open_stream() as source:
    mplayer = subprocess.POpen(['mplayer', '-'], stdin=subprocess.PIPE)
    shutil.copyfileobj(source, mplayer.stdin)
Alternativ gibt es auch eine Python-Anbindung an VLC. Damit sollte man das Streamen ebenfalls von Python aus beeinflussen können.
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

lunar hat geschrieben:@maxi_king_333: Dann lade den Stream in Python herunter und übergebe die Daten blockweise an die Standardeingabe eines MPlayer-Prozesses:

Code: Alles auswählen

with song.open_stream() as source:
    mplayer = subprocess.POpen(['mplayer', '-'], stdin=subprocess.PIPE)
    shutil.copyfileobj(source, mplayer.stdin)
Alternativ gibt es auch eine Python-Anbindung an VLC. Damit sollte man das Streamen ebenfalls von Python aus beeinflussen können.
So ähnlich hatte ich das auch schonmal versucht, da hatte der MPlayer aber irgendwelche Probleme mit, sodass z.B. die ersten paar Sekunden eines Liedes übersprungen wurden.
Mitlerweile benutze ich GStreamer zum Abspielen, das funktioniert perfekt...
Mal schauen, ob sich da was publizierbares ergeben wird... ;)
Vielen Dank jedenfalls, für die Tipps.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

ich wäre immernoch dankbar wenn mir jemand helfen könnte. Gestreamer bekomm ich nicht installiert, ist leider sehr kompliziert und windows und i-wie zickt es immer herum... mplayer gibts bei mir unter windows soweit (ich weiß) auch nicht.... bräuchte eigentlich nur etwas um die buffs jeweils zu decodieren, finde dazu aber kein modul....
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hi,

bin eigentlich gerade in Spitzbergen, aber ganz kurz:
Such mal nach PyMedia, ist zwar veraltet, aber das einzige, was angeblich einfach unter Windows funktioniert.
Ansonsten machst du halt einfach eine tempräre Datei, wie in den Beispielen, und spielst diese mit z.B. pygame ab.

Ich habe keine Ahnung, wann ich das nächste mal wieder Internet habe.
Bin aber in 2 Wochen wieder daheim.

Viele Grüße
Maxi
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Hab momentan ein Problem mit der API, bei der Albumsuche bekomme ich oft mit enumerate(album.songs) nichts zurück, aber wenn ich mit dem Browser auf grooveshark gehe, enthält das Album alle Lieder.... (Hatte das Problem bei dem Album "Urlaub fürs Gehirn")
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hi,

hmm...

Über EDGE kann (will) ich das gerade leider nicht testen.
Wenn es aber nicht immer auftritt, dann würde ich sagen, dass es an der Grooveshark API und nicht an der Python Implementierung davon liegt...
Das es im Browser funktioniert spricht jedoch dafür, dass es doch an der Python Implementierung liegt.
Es kann sein, dass irgendetwas an diesem Album anders ist als bei den anderen...
Wenn ich wieder daheim bin, in ca. 1er woche, dann werde ich das prüfen...

Es gibt auch noch ein paar andere Fehler, die ich endeckt habe...
Updates gibts dann wenn ich wieder daheim bin.

Viele Grüße
Maxi
weißned
User
Beiträge: 36
Registriert: Freitag 26. Februar 2010, 21:42

Hey,

leider funktioniert das ganze nicht mehr. Anscheinend ist die Client Version für htmlshark nicht mehr aktuell. Kannst du mir mal sagen wie du die genau herausbekommen hast?

Und wie hast du die Konstanten für das Radio herausbekommen, da fehlen nämlich noch welche :D (zB Dubstep)

edit: Okay die clientRevision habe ich jetzt via Wireshark herausbekommen, hast du das so auch gemacht? Sie ist: '20110606.04'

Aber jetzt bekomme ich bei init_queue() "invalid token", wie hast du denn diese MD5 Summe zur Berechnung des Tokens herausbekommen? :P
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hi,

habe es gestern wieder zum Laufen bekommen...

@waki
Versuch es jetzt nochmal, jetzt sollte das mit dem Album gehen.

@weißned
Wenn nur die Client Version das Problem wäre, dann wäre es kein Problem...
Ich benutze den Firebug und da kann ich die Version aus dem Request auslesen...
Das Probleme ist wie die Tokens generiert werden...
Das invalid token bezieht sich nicht auf die md5 Summe, mit der (md5 Summe) wird das secret für die Session errechnet.
Die Tokens für jeden Request werden jetzt in Zeile 636 berechnet...
Wie ich das herausgefunden habe?
Ich habe mir im Firebug zunnächst mal das JavaScript angeguckt und da gab es so schöne Funktionen wie hex_sha1 oder hex_md5.
Da habe ich dann einen Breakpoint gesetzt und einen Request gestartet....
Und schon wusste ich, was da wie berechnet wird....
Das hat jedoch diesmal nicht so ganz funktioniert, da das Token für jsqueue und htmlshark jetzt unterschiedlich berechnet werden...
Dabei wird das Token für jsqueue vom FlashPlayer berrechnet und den kann ich mir im Firebug nicht ansehen...
Letztendlich habe ich dann die Lösung im Arbeitsspeicher gefunden.
Mit dem Radio muss man halt einfach mal jedes anspielen und dann mit dem Firebug die ID aus dem Request kopieren...
Und da das viel monotone Arbeit ist, ist die Leise schon ein bisschen älter...
Vielleicht willst Du sie ja kompletieren und über Github beisteuern?

Viele Grüße
Maxi
weißned
User
Beiträge: 36
Registriert: Freitag 26. Februar 2010, 21:42

Hey,

danke das du dich so schnell darum gekümmert hast ;D

Mit MD5 meinte ich eigentlich die Berechnung des Tokens, hatte vergessen, dass das mit sha1 berechnet wird.
Das mit Firebug werde ich mir mal ansehen, und falls ich es schaffe dir die restlichen Radio Konstanten zukommen lassen ;)

EDIT:

Ich habs tatsächlich geschafft :D

Waren aber nur drei Stück ;)

Code: Alles auswählen

    RADIO_DUBSTEP = 2563
    RADIO_80 = 55
    RADIO_90_ALT_ROCK = 9
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hi,

danke, für die Konstanten, hab sie eingefügt...

Viele Grüße
Maxi
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

waki hat geschrieben:mplayer gibts bei mir unter windows soweit (ich weiß) auch nicht....
Ähm, ja, das muss man halt nachinstallieren. :roll:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@Leonidas: Ich glaube nicht, dass diese simple Tatsache nach drei Monaten noch relevant genug ist, um diese Diskussion von den Toten zu erwecken…
weißned
User
Beiträge: 36
Registriert: Freitag 26. Februar 2010, 21:42

Hey,

ich hab bei github gesehen, dass du fleißig weiter daran arbeitest, obwohl grooveshark in Deutschland ja die Pforten geschlossen hat. Hast du einen Weg gefunden das zu umgehen? Ich habe den aktuellen Stand mal ausprobiert, aber bei mir hat das leider nicht funktioniert.
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Ja, leider haben sie dicht gemacht :(...
Im Moment benutze ich einfach einen Proxy, um zugreifen zu können.
Mir ist aber aufgefallen, dass die API eigentlich nicht gesperrt ist, sondern ausschließlich die Hauptseite.
Theoretisch müsste man also nur die Session Initialisierung über den Proxy schicken - mal schauen, die Tage vielleicht...
Ich meine, es gab aber mal so einen initSession-Request, an die API, dann könnte man sich das auch noch sparen.
Um einen Proxy zu benutzen, kannst du als Umgebungsvariable einfach http_proxy=ip:port setzen.

Ich habe ein paar Dinge angepasst, vor allem hab ich aus der einen großen Datei mal ein paar kleine gemacht und Support für Python 3 hinzugefügt.
Außerdem hab ich noch eine Webapp beigelegt https://github.com/koehlma/pygrooveshar ... /README.md.
Damit kann man mit jedem Browser, der fähig ist MP3 Dateien über HTML 5 abzuspielen, Lieder hören.
Dazu braucht man auch noch ein kleines WSGI-Framework https://github.com/koehlma/pyweb.
Hab da selber was geschrieben, die anderen waren mir irgendwie alle zu aufgeblasen und konnten zu viel für ein paar statische Dateien und die API.
Antworten