Soundcloud API / stream端点产生401错误

问题描述 投票:10回答:2

我正在尝试编写一个React Native应用程序,该应用程序将流化SoundCloud中的某些音轨。作为测试,我一直在使用python来使用API​​,并且能够提出请求以解析网址,提取播放列表/曲目以及我需要的所有其他内容。

话虽如此,当向任何给定轨道的stream_url请求时,我收到401错误。

当前有问题的网址是:https://api.soundcloud.com/tracks/699691660/stream?client_id=PGBAyVqBYXvDBjeaz3kSsHAMnr1fndq1

我尝试了没有?client_id ...的尝试,我尝试替换了?使用&,我尝试获取另一个client_id,并使用allow_redirects将它设置为true和false,但是似乎没有任何效果。任何帮助将不胜感激。

每个轨道的streamable属性为True,因此不应该是权限问题。

编辑:

经过一些研究,我发现了一种半成功的解决方法。 API的/ stream端点仍然不起作用,但是,如果将目标端点更改为http://feeds.soundcloud.com/users/soundcloud:users:/ sounds.rss,它将为您提供RSS提要,该提要与您获得的RSS提要基本相同使用曲目或播放列表API端点。

其中的链接可以流式传输。

react-native soundcloud
2个回答
2
投票

由于我有同样的问题,@ Default的回答促使我寻找解决方案。但是我不理解步骤2和3中使用permalink_url的解决方法。更简单的解决方案可能是:

  1. 例如使用api-v2端点来获取用户曲目之类的喜欢:
https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
  1. 在响应中,我们可以找到所需的URL,如@Default在他的答案中提到的那样:
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阻止。


1
投票

好吧,我想我已经找到了适用于大多数人的通用解决方案。我希望它更简单,但这是我发现的最简单的东西。

  1. 使用API​​从用户提取曲目。您可以使用linked_pa​​rtitioning和next_href属性来收集所有内容,因为每个调用最大限制为200个音轨。

  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. 对此URL进行请求,添加?client_id = ...,它将在返回的json中为您提供另一个URL。

  5. 使用上一步返回的URL,您可以直接链接到浏览器中的URL,它将带您进入跟踪内容。我通过输入链接检查了VLC,它可以正确传输。

希望这可以帮助你们中的一些人发展。

© www.soinside.com 2019 - 2024. All rights reserved.