如何解决Spotipy 高请求率
我目前正在开发一个小程序(主要为我自己),它将获取我当前播放的歌曲并将其发送到数据库,以便我可以制作一些图表来查看我在 X 数量的音乐中播放艺术家的频率时间。 为此,我有以下代码:
import spotipy
import spotipy.util as util
from time import sleep
# My secret keys SO DON'T LEAK THEM
clientID = "CLIENT_ID"
clientSec = "CLIENT_SECRET"
while True:
# The scopes defines how much you are allowed
scope = "user-read-currently-playing"
username = "USERNAME"
# Gets a token for spotify and should keep it updated
token = util.prompt_for_user_token(username,scope,client_id=clientID,client_secret=clientSec,redirect_uri="http://localhost/Spotify/callback.php")
sp = spotipy.Spotify(auth=token)
results = sp.currently_playing(market=None)
progress = results["progress_ms"]
playing = results["is_playing"]
# Add the song after 15 seconds of playing
if (progress >= 15000 and progress <= 15500 and playing):
sendToDB()
# Shows raw output that spotify returns
print(results)
sleep(0.4)
每 0.4 秒它会检查一首歌曲是否在一个时间范围内,看看是否有新歌曲在播放。 (我知道这是一种糟糕的方法,但我还没有找到更好的方法)。但是昨天我在 Spotify 开发者门户上看到,2 个用户每天总共发出大约 300000 个请求。我不认为这是正常的,所以我尝试了一些不同的方法来只在需要刷新令牌时调用 util.prompt_for_user_token()
但问题是它只会在刷新令牌时返回一个新结果.所以我有两个问题:
- 有没有更好的方法来检查是否有新歌在播放,
- 有没有办法只每 30 分钟请求一个新令牌,并且仍然可以从 Spotify 获得实时结果?
解决方法
还有 Recently Played Tracks 端点,它不是获取当前播放的单个曲目,而是获取最近播放的 50 个曲目。
只有听过足够长的曲目(我认为 30 秒)才会出现在此端点上(这是 Spotify 将其标记为播放的阈值)。
由于您知道播放计数的阈值是 30 秒,并且端点返回的结果数是 50,这意味着您只需要大约每 50 * 30 秒检查一次即可确定捕获所有听过的曲目,每25 分钟。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。