我正在尝试使用Ruby on Rails创建一个应用程序,允许用户下载他们上传的所有歌曲。此时我已经使用OmniAuth对用户进行了身份验证,并且我已经设法使用Soundcloud的Ruby interface及其API来提取一些数据。
根据API,每个曲目都有一个关联的标题,artwork_url和download_url(我已经使用API来获取此信息)。我想显示每首歌曲,显示其标题和插图(如果有的话),然后如果他们选择下载该曲目,他们将能够点击一个按钮并从download_url下载该曲目。
所以这就是我所意识到的:对于大多数曲目(或声音,因为它们在Soundcloud中调用),默认情况下在上传时会禁用下载。问题是,还有一个选项显示“Apps Enabled / Disabled”。我想知道的是,如果禁用了一首歌的下载,已经过身份验证的第三方应用程序是否仍然可以使用下载URL来获取该轨道?我想知道用户是否需要单独浏览所有曲目并启用下载才能使其正常工作。
如果您需要更多细节,请说明。如果这是一个显而易见的问题,请道歉。
谢谢,
纳特
答案 0 :(得分:4)
我想知道的是,如果禁用一首歌的下载,可以获得第三名 已经过身份验证的派对应用程序仍然使用下载 抓住轨道的网址?
是的,它可以。但是,请注意,为了使API实际为文件提供服务,必须有HTTP Authorization标头和client_id GET参数。
这意味着只需吐出像
这样的链接<a href="https://api.soundcloud.com/tracks/{id}/download">Download {title}</a>
无济于事。对于client_id
,您只需将其附加到href
,但由于浏览器不知道您的应用已获得授权且无法通过简单请求发送HTTP标头,因此API获胜不要让用户下载不可公开下载的曲目。
因此,您需要在ruby中构建代理并将href
设置为本地端点并处理ruby端与SoundCloud API的连接,这样您就可以通过OAuth传递HTTP头令牌。
答案 1 :(得分:1)
向API发出HTTP请求(Get),调用&#39; / convert&#39; route将返回您的曲目ID。
然后你可以向api&#39; / stream&#39;发出POST请求。传递曲目ID和?client_id = YOURCLIENTID
从响应中,您可以获得可用于在Soundcloud中流式传输和下载每个轨道的流URL。后一种选择并不合法,所以以此为例。
编辑:这可以使用纯JS / jQuery完成,无需运行服务器