2013-07-26 6 views
15

Ich versuche, die URL meiner Audio-Streams für meine HTML5-Player zu verstecken und hatte wirklich Mühe, einen Weg zu denken, und dann erkannte ich, dass Soundcloud die URL verstecken muss ihre Ströme. Also ging ich auf Soundcloud, öffnete die Konsole und spielte einen Track, aber ich konnte keinen offensichtlichen Weg sehen, wie die URL versteckt ist. Danach habe ich mir den DOM-Baum angeschaut, um zu sehen, ob dort irgendwelche Audio-Informationen vorhanden sind, aber ich habe nichts gefunden! Es gibt nicht einmal eine ID für den Player/Audio, also bin ich sehr verwirrt darüber, wie Soundcloud es getan hat.Wie hat Soundcloud versteckt die URL von Streaming-Audio

Jetzt habe ich so gut wie möglich mit dem Verbergen der Audio-URL getan. Ich habe eine ID in das DOM für den Track eingefügt, habe diese ID erhalten, als die Play-Taste geklickt wurde, und die URL für diese ID aus der Datenbank abgerufen. Das offensichtliche Problem dabei ist, dass jeder, der bereit genug ist, einfach zur Konsole gehen und die URL von den Netzwerkereignissen erhalten kann.

Ich versuche nicht, die Sicherheit von Soundcloud zu durchbrechen, um Tracks herunterzuladen, die ich nicht sein sollte. Ich bin nur neugierig, wie sie die URL versteckt haben. Jetzt bin ich auch neugierig, wie sich jede Spur unterscheidet, denn es gibt nichts im DOM, das sie unterscheidet (nicht, dass ich auf meinen kurzen Blick sowieso gefunden hätte).

Also, kurz gesagt, hat jemand irgendwelche Ideen, wie Soundcloud das erreicht hat oder wie das erreicht werden könnte?

Antwort

19

Soundcloud ist eine reine JS-Site.

Wie Sie gesagt haben, gibt es keine ID des Songs mit dem HTML geladen. Die Art und Weise, wie Songs erkannt werden, hängt von der Seiten-URL ab. Das geschieht über. Diese URL (Beispiel):

https://api.sndcdn.com/resolve?url=https%3A//soundcloud.com/hoodinternet/joywave-tongues-hood-internet-remix&_status_code_map%5B302%5D=200&_status_format=json&client_id=YOUR_CLIENT_ID

Dieses etwas wie folgt zurück:

{"status":"302 - Found","location":"https://api.soundcloud.com/tracks/100270342?client_id=YOUR_CLIENT_ID"}

Als nächstes lädt er den Standort URL, von der JSON oben. Dies gibt eine Reihe von Informationen über die Strecke, darunter:

stream_url: "https://api.soundcloud.com/tracks/100270342/stream"

Dann lädt er diese URL:

https://api.sndcdn.com/i1/tracks/100270342/streams?client_id=YOUR_CLIENT_IT

, die eine Antwort wie folgt zurückgibt:

{"http_mp3_128_url":"https://ec-media.soundcloud.com/2gNVBYiZ06bU.128.mp3?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88\u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQ\u0026Expires=1374883403\u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}

So verbergen sie ihre Stream-URLs. Der einzige nicht offensichtliche Teil ist, dass sie die Lied-ID finden, indem sie eine API mit der URL als Parameter treffen. Das Gleiche kann mit Download-URLs auf Tracks, die es unterstützen, geschehen.

+1

einige Sounds sind nicht streambar? Dies ist ein Beispiel http://soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and-future irgendeine Lösung? – Kassem

+2

@Kassem - Das ist für mich streambar. Ich habe diesen Soundcloud-Downloader vor einer Weile erstellt: https://gist.github.com/calvin-nt/6629464 - Benutze ihn wie folgt: python sc_dl.py soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and- Zukunft - es erfordert Anfragen für Python. –

+0

danke @scandinavian_ ich bin nicht vertraut mit pyhon aber wie ich verstehen kann ist, dass die Streaming-URL für das Lied wird https://api.sndcdn.com/i1/tracks/73544191/streams?client_id= Ich habe es versucht Verwenden Sie den Browser mit meiner Client-ID, aber es gibt 403 verboten. irgendeine Idee? – Kassem

2

Wenn Sie SoundCloud.com und öffnen Sie Ihren Debugger (Chrome ist was ich verwende). Sehen Sie sich die Registerkarte "Netzwerk" an und Sie werden ein Skript sehen, das Audio aufruft: anonyme_id #########.

Dies ist wie ein REST-Aufruf strukturiert, das heißt, sie geben eine ID an einen Dienst in ihrem Backend weiter und geben die Audioausgabe anonym zurück.

0
+0

Oh nach Überprüfung der oben genannten URL erkannte, dass URL nicht eingeschränkt ist. : D –