Python 如何让所有艺术家使用Spotify API?

Python 如何让所有艺术家使用Spotify API?,python,dataframe,api,spotify,spotify-app,Python,Dataframe,Api,Spotify,Spotify App,我能够创建一个类对象来验证我的客户端ID。在下面的代码中,我编写了一个函数——这将允许我根据ID抓取多个艺术家 函数是get_all_artists()。当我运行两个ID时,它给我一个404错误。有人能解释或帮助我理解我需要修改的内容吗?我希望能够将json格式转换为数据帧 enter code here class SpotifyAPI(object): access_token = None access_token_expires = datetime.datetime.now() acc

我能够创建一个类对象来验证我的客户端ID。在下面的代码中,我编写了一个函数——这将允许我根据ID抓取多个艺术家

函数是get_all_artists()。当我运行两个ID时,它给我一个404错误。有人能解释或帮助我理解我需要修改的内容吗?我希望能够将json格式转换为数据帧

enter code here
class SpotifyAPI(object):
access_token = None
access_token_expires = datetime.datetime.now()
access_token_did_expire = True
client_id = None
client_secret = None
token_url = "https://accounts.spotify.com/api/token"

def __init__(self, client_id, client_secret, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.client_id = client_id
    self.client_secret = client_secret

def get_client_credentials(self):
    """
    Returns a base64 encoded string
    """
    client_id = self.client_id
    client_secret = self.client_secret
    if client_secret == None or client_id == None:
        raise Exception("You must set client_id and client_secret")
    client_creds = f"{client_id}:{client_secret}"
    client_creds_b64 = base64.b64encode(client_creds.encode())
    return client_creds_b64.decode()

def get_token_headers(self):
    client_creds_b64 = self.get_client_credentials()
    return {
        "Authorization": f"Basic {client_creds_b64}"
    }

def get_token_data(self):
    return {
        "grant_type": "client_credentials"
    } 

def perform_auth(self):
    token_url = self.token_url
    token_data = self.get_token_data()
    token_headers = self.get_token_headers()
    r = requests.post(token_url, data=token_data, headers=token_headers)
    if r.status_code not in range(200, 299):
        raise Exception("Could not authenticate client.")
        # return False
    data = r.json()
    now = datetime.datetime.now()
    access_token = data['access_token']
    expires_in = data['expires_in'] # seconds
    expires = now + datetime.timedelta(seconds=expires_in)
    self.access_token = access_token
    self.access_token_expires = expires
    self.access_token_did_expire = expires < now
    return True

def get_access_token(self):
    token = self.access_token
    expires = self.access_token_expires
    now = datetime.datetime.now()
    if expires < now:
        self.perform_auth()
        return self.get_access_token()
    elif token == None:
        self.perform_auth()
        return self.get_access_token() 
    return token

def get_resource_header(self):
    access_token = self.get_access_token()
    headers = {
        "Authorization": f"Bearer {access_token}"
    }
    return headers
    
    
def get_resource(self, lookup_id, resource_type='albums', version='v1'):
    endpoint = f"https://api.spotify.com/{version}/{resource_type}/{lookup_id}"
    headers = self.get_resource_header()
    r = requests.get(endpoint, headers=headers)
    if r.status_code not in range(200, 299):
        return {}
    return r.json()

def get_album(self, _id):
    return self.get_resource(_id, resource_type='albums')

def get_artist(self, _id):
    return self.get_resource(_id, resource_type='artists')

#get all artists 
def get_all_artists(self, resource_type='artists', version='v1', lookup_ids): 
    endpoint = f"https://api.spotify.com/{version}/{resource_type}?{lookup_ids}="
    headers = self.get_resource_header() 
    r = requests.get(endpoint, headers=headers)
    if r.status_code in range(200, 299): 
        return {} 
    return r.json() 

    import pandas as pd
    import warnings 
    warnings.filterwarnings('ignore')
    #normalize the data to get proper form for one artist
    from pandas.io.json import json_normalize 


    all_artists = spotify.get_all_artists("7LTShHcq1KdTrWeLvWoYed", 
    "64k5e9kV9MdukXjFrR5R37")
     df2 = pd.json_normalize(all_artists)
在此处输入代码
类SpotifyAPI(对象):
访问令牌=无
access\u token\u expires=datetime.datetime.now()
access\u token\u Dod\u expire=True
客户端id=无
client_secret=None
令牌\u url=”https://accounts.spotify.com/api/token"
定义初始化(self、client\u id、client\u secret、*args、**kwargs):
super()
self.client\u id=客户端\u id
self.client\u secret=client\u secret
def获取客户端凭据(自身):
"""
返回base64编码的字符串
"""
client\u id=self.client\u id
client\u secret=self.client\u secret
如果客户端\u secret==无或客户端\u id==无:
引发异常(“必须设置客户端id和客户端机密”)
client_creds=f“{client_id}:{client_secret}”
client\u creds\u b64=base64.b64encode(client\u creds.encode())
返回客户端\u creds\u b64.decode()
def get_令牌_头(自身):
client\u creds\u b64=self.get\u client\u credentials()
返回{
“授权”:f“基本{客户信任{U b64}”
}
def获取令牌数据(自身):
返回{
“授予类型”:“客户端凭据”
} 
def perform_auth(self):
token\u url=self.token\u url
token\u data=self.get\u token\u data()
token\u headers=self.get\u token\u headers()
r=requests.post(token\u url,data=token\u data,headers=token\u headers)
如果r.status_代码不在范围内(200299):
引发异常(“无法对客户端进行身份验证。”)
#返回错误
data=r.json()
now=datetime.datetime.now()
access\u token=数据['access\u token']
expires_in=数据['expires_in']#秒
expires=now+datetime.timedelta(秒=expires\u in)
self.access\u token=访问\u token
self.access\u token\u expires=过期
self.access\u token\u did\u expire=expires