Def*_*ult 15 soundcloud react-native
我正在尝试编写一个 react native 应用程序,它将从 Soundcloud 流式传输一些曲目。作为测试,我一直在使用 python 使用 API,并且我能够发出请求来解析 url、拉出播放列表/曲目以及我需要的所有其他内容。
话虽如此,当向任何给定轨道的 stream_url 发出请求时,我收到 401 错误。
当前有问题的网址是: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 端点所获得的相同。
其中包含的链接可以流式传输。
好的,我想我已经找到了一个适用于大多数人的通用解决方案。我希望它更容易,但这是我发现的最简单的事情。
使用 API 从用户那里提取曲目。您可以使用 links_partitioning 和 next_href 属性来收集所有内容,因为每次调用的最大限制为 200 个轨道。
使用在 JSON 中下拉的数据,您可以使用 permalink_url 键来获取您在浏览器中输入的相同内容。
向 permalink_url 发出请求并访问 HTML。您需要进行一些解析,但您想要的 url 将具有以下效果:
您可能可以使用正则表达式来简单地解析它。
向这个 url 添加 ?client_id=... 的请求,它会在它的返回 json 中给你 YET ANOTHER url。
使用从上一步返回的 url,您可以直接链接到浏览器中的 url,它将带您到您的曲目内容。我通过输入链接来检查 VLC,并且它可以正确传输。
希望这可以帮助你们中的一些人进行开发。
由于我有同样的问题,@Default 的回答促使我寻找解决方案。但我不明白第permalink_url 2 步和第 3 步中的解决方法。更简单的解决方案可能是:
api-v2端点:https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
Run Code Online (Sandbox Code Playgroud)
https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
Run Code Online (Sandbox Code Playgroud)
client_id作为查询参数向此 URL 发出请求,您将获得另一个 URL,您可以使用该 URL 流式传输/下载曲目请注意,api-v2它仍然不是公开的,您的客户的请求可能会被 CORS 阻止。
小智 6
正如@user208685所提到的,通过使用 SoundCloud API v2,解决方案可以更简单一些:
注意:此链接仅在有限的时间内有效,并且可以通过重复步骤 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);
})();
Run Code Online (Sandbox Code Playgroud)
对于 Python 中的类似解决方案,请查看此 GitHub 问题:https : //github.com/soundcloud/soundcloud-python/issues/87
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |