我有一本剧本,大约运行了1小时。
df是我从自己的Postgres数据库中查询的行创建的数据框架。我将对此进行迭代,以获得artist_name值并进行API调用。
那张桌子上有47k条记录。
一个多小时后,剧本就不再给我任何回应了。没有错误。
断线是results = artist_albums(...)
。
在运行之前放置一个断点(),但一旦该行运行,它将停止。没有状态错误429等等..。
我对Spotipy API的影响太大了吗?
for idx, val in enumerate(df['artist_name']):
#get albums for each artist
results = artist_albums('spotify:artist:'+df['artist_name'], album_type='album')
albums = results['items']
while results['next']:
results = spotify.next(results)
albums.extend(results['items'])
sleep(0.5)
for album in albums:
print(album['name'])
try:
q = (album['name'],
album['id'],
album['uri'],
album['release_date'],
album['release_date_precision'],
album['total_tracks'],
album['artists'][0]['id'],
album['type'],
album['external_urls']['spotify']
)
)
cur.execute("""insert into schema.table values (
%s, %s, %s, %s, %s,
%s, %s, %s, %s)""", q)
conn.commit()
```
发布于 2022-02-01 06:42:50
您可能已经访问了Spotiy的利率限值,它在30秒滚动窗口中工作。
如果您的应用程序在短时间内发出了大量Web请求,那么它可能会收到Spotify的429个错误响应。这表示您的应用程序已达到我们的Web速率限制。Web有速率限制,以保持API的可靠性,并帮助第三方开发人员以负责任的方式使用API。Spotify的API速率限制是根据应用程序在30秒滚动窗口中调用Spotify的次数来计算的。
避免这种情况的一种方法是在API调用之间引入一些等待时间,例如使用time.sleep,即:
import time
time.sleep(10) # sleeps for 10 seconds
https://stackoverflow.com/questions/70925407
复制相似问题