如何在不每秒调用太多次的情况下通过Soundcloud解析api进行循环

How to loop over Soundcloud resolve api without calling too many times per second?

本文关键字:Soundcloud 解析 api 循环 情况下 太多 调用      更新时间:2023-09-26

我有一组soundcloud音轨url,我需要为其获取流媒体url(称为stream_url)。我知道resolve允许您只使用一个url来调用api并获取其信息(它在json中返回stream_url)。

如何循环遍历曲目url列表以返回每个曲目的stream_url?我该如何做到这一点,以免他们的服务器被过多的api调用所淹没?我有一长串的跟踪网址。

除非有令人信服的理由不这样做,否则只在用户需要数据之前进行昂贵的API调用。因此,如果您有一个列表,并且不需要结果,除非用户尝试流式传输曲目,那么只需调用API作为"加载"的一部分,并在初始启动滞后时间内将其打包。

如果出于某种原因,您总是需要每个值,那么您应该限制调用,一次只加载几个。例如,也许你加载了5个,等待它们完成,然后再加载下一个5。

这取决于开始时的输入。既然你说你在使用解析api,我假设你有几个轨道的永久链接,例如:

https://soundcloud.com/someuser/sometrack
https://soundcloud.com/anotheruser/anothertrack

我建议做的是将每个url解析一次并存储结果。并非所有字段都将永远有效(也就是说,作者可能会更改曲目的标题或其他什么,播放次数很快就会过期,等等),但你会得到固定的曲目id。

从那里,您实际上可以自己构造stream_url,因为它是一种固定格式:https://api.soundcloud.com/tracks/:id/stream。只要把id代入每一个,你就离开了。

如果你沿着这条路走下去,只需要每个轨道的id,你甚至可以在使用解析端点时提高效率,方法是不遵循302,而是从返回的位置解析id:

curl https://api.soundcloud.com/resolve'?url'=http://soundcloud.com/forss/flickermood'&client_id'=YOUR_CLIENT_ID
{"status":"302 - Found","location":"https://api.soundcloud.com/tracks/293?client_id=YOUR_CLIENT_ID"}

在这里,您可以看到它解析为id为293的track。