web-dev-qa-db-ja.com

soundcloudはストリーミングオーディオのURLをどのように隠しましたか

HTML5プレーヤーのオーディオストリームのURLを非表示にしようとしていますが、その方法を考えるのに本当に苦労していました。その後、soundcloudはストリームのURLを非表示にする必要があることに気付きました。それで私はsoundcloudに行き、コンソールを開いてトラックを再生しましたが、URLが隠されている明白な方法を見ることができませんでした。この後、DOMツリーを調べて、そこに何らかのオーディオ情報があるかどうかを確認しましたが、何も見つかりませんでした。プレーヤー/オーディオのIDさえないので、soundcloudがそれをどのように行ったかについて私は非常に混乱しています。

これで、オーディオURLを非表示にして、これまでのところできる限り最善を尽くしました。トラックのDOMにIDを入れ、再生ボタンがクリックされたときにそのIDを取得し、データベースからそのIDのURLを取得しました。それに関する明らかな問題は、十分に進んでいる人は誰でもコンソールにアクセスしてネットワークイベントからURLを取得できることです。

私は、soundcloudのセキュリティを破って、あるべきではないトラックをダウンロードしようとはしていません。彼らがどのようにURLを隠したのか知りたいだけです。 DOMにはトラックを区別するものが何もないので、各トラックがどのように区別されるかについても興味があります(とにかく簡単な外観で見つけたものではありません)。

それで、要するに、soundcloudがこれをどのように達成したか、またはこれをどのように達成できるかについて誰かが何か考えを持っていますか?

17
Jacob Windsor

Soundcloudはほとんど純粋なJSサイトです。

あなたが言ったように、HTMLでロードされた曲のIDはありません。曲が認識される方法は、ページの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"}

次に、上記のJSONから場所のURLを読み込みます。これにより、次のようなトラックに関する一連の情報が返されます。

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を隠す方法です。唯一の明白でない部分は、URLをパラメーターとしてAPIをヒットすることにより、曲IDを見つけることです。それをサポートするトラックのダウンロードURLでも同じことができます。

20
scandinavian_

SoundCloud.comにアクセスしてデバッガーを開いた場合(私が使用しているのはChromeです)。 [ネットワーク]タブを見ると、audio?anonymous_id #########を呼び出すスクリプトが表示されます。

これはREST呼び出しのように構成されています。つまり、バックエンドのサービスにIDを渡し、匿名で音声出力を返します。

2
Trendy
0
Shahab A