避免429 - 有没有办法通过Spotipy将Spotify API "retry-after"响应合并到API调用中?



我有一个数千名艺术家的列表(按Spotify ID(,我想使用Spotify的artists_albums((方法获取所有艺术家的专辑。因此,这个想法是循环通过每个艺术家,并使用该方法调用Spotify API。然而,由于有成千上万的艺术家,Spotify已经开始屏蔽我的电话,导致SpotifyException"最大重试次数,原因:429错误响应过多";。

除了使用time.sleep((,还有什么更优雅的方法可以防止通过Spotipy在30秒内进行过多的呼叫吗?理想情况下,通过采取Spotify的回应";在"重试"之后重试;等那么长时间?

谢谢!

用多个ips执行请求当我在公共API上工作时,也发生了同样的事情,它有一些限制,比如每天50个请求。所以当我的限制超过时,他们会阻止我的ip,然后我制作一个python脚本,从中获取免费ip列表https://free-proxy-list.net/并将其存储在列表中,并开始执行请求。如果我得到一个达到极限的错误,则从列表中选择新的ip(下一个ip(

这个功能可以抓取那些ips并返回ips 的列表

from bs4 import BeautifulSoup
import requests
def GetProxys():
website_html = requests.get("https://free-proxy-list.net").text
soup = BeautifulSoup(website_html, "html.parser")
soup = soup.find("table")
Headings = []
Body = []
Ip = []
for heading in soup.find_all("th"):
Headings.append(heading.text)
for ip_html in soup.find_all("tr"):
ip_info_list = []
for ip_info in ip_html.find_all("td"):
ip_info_list.append(ip_info.text)
if len(ip_info_list) > 1:
if ip_info_list[6] == "yes":
Ip.append(f"{ip_info_list[0]}:{ip_info_list[1]}")
Body.append(ip_info_list)
return Ip, 

Ips = GetProxys()

对目标api执行请求的函数(lethttp://api.ipify.org返回您请求的ip(

def perform_request(ip):
http_proxy = f"http://{ip}"
https_proxy = f"https://{ip}"
proxyDict = {
"http": http_proxy,
"https": https_proxy,
}
try:
r = requests.get("http://api.ipify.org",
proxies=proxyDict, timeout=10)
print(f"{r}/{r.text}", end="/")
except:
print("{-_-}", end="/")
print()
for ip in ips:
perform_request(ip)

我认为这对有帮助

最新更新