2013-07-26 3 views
15

Я пытаюсь скрыть URL-адрес моих аудиопотоков для своего проигрывателя HTML5 и действительно пытался понять, как это сделать, а затем я понял, soundcloud должен скрывать URL-адрес их потоки. Поэтому я пошел в soundcloud, открыл консоль и сыграл трек, но я не видел никакого очевидного способа, чтобы URL был скрыт. После этого я взглянул на дерево DOM, чтобы узнать, есть ли там какая-либо аудиоинформация, но я ничего не нашел! Там нет даже идентификатора для проигрывателя/аудио, поэтому я очень смущен тем, как это звучит.Каким образом soundcloud скрывает URL-адрес потокового аудио

Теперь я сделал все, что мог, пока скрываю аудио-URL. Я поместил идентификатор в DOM для дорожки, получил этот идентификатор, когда нажата кнопка воспроизведения, и вытащил URL-адрес этого идентификатора из базы данных. Очевидная проблема заключается в том, что любой желающий может просто перейти на консоль и получить URL-адрес от сетевых событий.

Я не пытаюсь переломить систему soundcloud для загрузки треков, которых я не должен быть. Мне просто интересно, как они скрыли URL. Теперь мне также любопытно, как различают каждый трек, поскольку в DOM нет ничего, что отличало бы их (не то, что я нашел на моем краткий взгляд в любом случае).

Итак, у кого-нибудь есть идеи о том, как soundcloud достиг этого или как это может быть достигнуто?

ответ

19

Soundcloud - довольно чистый сайт JS.

Как вы сказали, нет идентификатора песни, загруженной HTML. Способ распознавания песен определяется URL-адресом страницы. Это делается через. Этот URL-адрес (пример):

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

Это возвращает что-то вроде этого:

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

Далее он загружает URL местоположения, из приведенного выше JSON. Это возвращает кучу информации о треке, в том числе:

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

Затем он загружает этот URL:

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

Который возвращает ответ, как это:

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

Так вот, как они скрывают свои URL-адреса потока. Единственная неочевидная часть состоит в том, что они находят идентификатор песни, ударяя API с URL-адресом в качестве параметра. То же самое можно сделать с URL-адресами загрузки на дорожках, которые его поддерживают.

+1

некоторые звуки не являются текущими? это пример http://soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and-future любого решения? – Kassem

+2

@ Kassem - Это доступно для меня. Я сделал этот soundcloud downloader некоторое время назад: https://gist.github.com/calvin-nt/6629464 - Используйте его так: python sc_dl.py soundcloud.com/ymcmbofficial/lil-wayne-ft-drake-and- future - для этого требуются запросы на python. –

+0

спасибо @scandinavian_ Я не знаком с pyhon, но, насколько я понимаю, потоковый url для этой песни будет https://api.sndcdn.com/i1/tracks/73544191/streams?client_id= Я пробовал используя браузер с моим идентификатором клиента, но он запрещает 403. Есть идеи? – Kassem

2

Если у вас есть SoundCloud.com и откройте свой отладчик (Chrome - это то, что я использую). Посмотрите на вкладку «Сеть», и вы увидите скрипт, вызывающий звук? Anonymous_id #########.

Это структурировано как звонок REST, что означает, что они передают идентификатор службе на свой сервер, и это возвращает анонимный аудиовыход.

0
+0

Ой после проверки вышеприведенного URL понял, что URL не ограничен. : D –

Смежные вопросы