我正在尝试编写一个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端点。
其中的链接可以流式传输。
由于我有同样的问题,@ Default的回答促使我寻找解决方案。但是我不理解步骤2和3中使用permalink_url
的解决方法。更简单的解决方案可能是:
api-v2
端点来获取用户曲目之类的喜欢:https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
collection: [
{
track: {
media: {
transcodings:[
...
{
url: "https://api-v2.soundcloud.com/media/soundcloud:tracks:713339251/0ab1d60e-e417-4918-b10f-81d572b862dd/stream/progressive"
...
}
]
}
}
...
]
client_id
作为查询参数对此URL进行请求,您将获得另一个URL,您可以在其中传输/下载轨道请注意,api-v2
仍然不公开,并且来自客户的请求可能会被CORS阻止。
好吧,我想我已经找到了适用于大多数人的通用解决方案。我希望它更简单,但这是我发现的最简单的东西。
使用API从用户提取曲目。您可以使用linked_partitioning和next_href属性来收集所有内容,因为每个调用最大限制为200个音轨。
使用在JSON中提取的数据,您可以使用permalink_url键来获取要在浏览器中键入的内容。
向permalink_url发出请求并访问HTML。您需要进行一些解析,但是所需的url会达到以下效果:
您可能可以使用正则表达式简单地解析它。
对此URL进行请求,添加?client_id = ...,它将在返回的json中为您提供另一个URL。
使用上一步返回的URL,您可以直接链接到浏览器中的URL,它将带您进入跟踪内容。我通过输入链接检查了VLC,它可以正确传输。
希望这可以帮助你们中的一些人发展。