Soundcloud API / streamエンドポイントで401エラーが発生する


13

Soundcloudからいくつかのトラックをストリーミングする反応ネイティブアプリを作成しようとしています。テストとして、Pythonを使用してAPIで遊んでおり、URLの解決、プレイリスト/トラックのプル、その他必要なものすべてをリクエストすることができます。

とはいえ、特定のトラックのstream_urlにリクエストを送信すると、401エラーが発生します。

問題の現在のURLは次のとおりです:https : //api.soundcloud.com/tracks/699691660/stream?client_id=PGBAyVqBYXvDBjeaz3kSsHAMnr1fndq1

?client_id ...なしで試してみましたが、?&を使用して、別のclient_idを取得しようとしました。allow_redirectsをtrueとfalseの両方として使用しようとしましたが、何も機能しないようです。どんな助けでも大歓迎です。

すべてのトラックのストリーミング可能なプロパティはTrueであるため、権限の問題であってはなりません。

編集:

少し調べたところ、半ば成功した回避策が見つかりました。APIの/ streamエンドポイントはまだ機能していませんが、宛先エンドポイントをhttp://feeds.soundcloud.com/users/soundcloud:users:/sounds.rssに変更すると、次のようなRSSフィードが提供されます(ほとんど)トラックまたはプレイリストのAPIエンドポイントを使用して得られるものと同じです。

そこに含まれるリンクはストリーミングできます。


1
私はしばらくAPIを使用していますが、最近401エラーも発生します。それはあなただけではありません。
r3verse

私のJavaScriptの場合、APIが数日間機能しなくなりました。
Daniel

私が使用している、soundcloud APIにヒットしたすべてのアプリは、数週間停止しています。SoundCloudがはかなり本当に吸うサードパーティの開発を断念したように思える
oriyentel

回答:


7

さて、私はほとんどの人に役立つ一般的な解決策を見つけたと思います。もっと簡単にできればいいのですが、これは私が見つけた最も簡単なものです。

  1. APIを使用してユーザーからトラックをプルします。呼び出しごとに最大200トラックの制限があるため、linked_pa​​rtitioningおよびnext_hrefプロパティを使用してすべてを収集できます。

  2. JSONでプルダウンされたデータを使用すると、permalink_urlキーを使用して、ブラウザーに入力するのと同じものを取得できます。

  3. permalink_urlへのリクエストを作成し、HTMLにアクセスします。いくつかの解析を行う必要がありますが、必要なURLは次のような効果になります。

    " https://api-v2.soundcloud.com/media/soundcloud:tracks:488625309/c0d9b93d-4a34-4ccf-8e16-7a87cfaa9f79/stream/progressive "

    おそらく正規表現を使用して、これを簡単に解析できます。

  4. ?client_id = ...を追加してこのURLにリクエストを送信すると、戻りjsonにまだ別のURLが表示されます。

  5. 前の手順で返されたURLを使用して、ブラウザーで直接そのURLにリンクでき、トラックのコンテンツに移動します。リンクを入力してVLCを確認したところ、正しくストリーミングされました。

うまくいけば、これはあなたの一部があなたの発達を助けるのに役立ちます。


1
v2 apiの使用のみを検討したことがありますか?彼らが持っているようだapi-v2.soundcloud.com/tracks?id=<song_id>&client_id=彼らが使用するリンクを
user208685

これは良い決断です。ただし、直接ストリームURLを取得して再生しようとすると、SoundCloudの再生カウンターはこの再生を数えます。
アレックス

6

同じ問題があるので、@ Defaultからの回答が解決策を探す動機になりました。しかしpermalink_url 、手順2と3の回避策を理解していませんでした。より簡単な解決策は次のとおりです。

  1. 次のapi-v2ようなエンドポイントを使用して、ユーザートラックのいいねの例を取得します。
https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
  1. 応答では、@ Defaultの回答に記載されているように、必要なURLを見つけることができます。
collection: [
   {
      track: {
         media: {
            transcodings:[
                   ...
                  {
                     url: "https://api-v2.soundcloud.com/media/soundcloud:tracks:713339251/0ab1d60e-e417-4918-b10f-81d572b862dd/stream/progressive"
                  ...
                  }
               ]
            }

         }
...
]
  1. client_idクエリパラメータとしてを使用してこのURLにリクエストを送信すると、トラックをストリーミング/ダウンロードできる別のURLが取得されます

api-v2はまだ公開されておらず、クライアントからのリクエストはおそらくCORSによってブロックされることに注意してください。


3
ユーザーからのトラックである:/ユーザー/ <user_idを> /トラックユーザーから好きなものがある:/ユーザー/ <user_idを> / track_likesただ、シングルトラックです:/トラック/ <track_id>
r3verse

@ r3verse右、私の回答を編集しましたが、トラックの表現は異なるエンドポイントで同じである必要があります
Serg

はい、@ Sergさん、単一のトラックの場合、ネストされたコレクションオブジェクトはありませんが、トラックの表現は同じです。どちらにしてもとてもいい。
r3verse

5

@ user208685で述べたように、SoundCloud API v2を使用することで、ソリューションを少し簡単にすることができます。

  1. トラックIDを取得します(例:https://developers.soundcloud.com/docsのパブリックAPIを使用)
  2. https://api-v2.soundcloud.com/tracks/TRACK_ID?client_id=CLIENT_IDからJSONを取得します
  3. JSON解析MP3プログレッシブストリームURLから
  4. ストリームURLからMP3ファイルのURLを取得
  5. MP3ファイルのURLからメディアを再生する

:このリンクは限られた時間のみ有効であり、手順3.〜5.を繰り返すことで再生成できます。

node(でのnode-fetch)例:

const clientId = 'YOUR_CLIENT_ID';

(async () => {
  let response = await fetch(`https://api.soundcloud.com/resolve?url=https://soundcloud.com/d-o-lestrade/gabriel-ananda-maceo-plex-solitary-daze-original-mix&client_id=${clientId}`);
  const track = await response.json();
  const trackId = track.id;

  response = await fetch(`https://api-v2.soundcloud.com/tracks/${trackId}?client_id=${clientId}`);
  const trackV2 = await response.json();
  const streamUrl = trackV2.media.transcodings.filter(
    transcoding => transcoding.format.protocol === 'progressive'
  )[0].url;

  response = await fetch(`${streamUrl}?client_id=${clientId}`);
  const stream = await response.json();
  const mp3Url = stream.url;

  console.log(mp3Url);
})();

Pythonでの同様のソリューションについては、このGitHubの問題を確認してくださいhttps : //github.com/soundcloud/soundcloud-python/issues/87

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.