Spotify API艺术家搜索代码报错求助:API链接无效问题
修复Spotify API搜索艺术家的代码问题
我来帮你搞定这个API链接无效的问题!你的代码主要在API请求路径、参数传递和响应解析这几个地方出了问题,下面是修复后的完整代码,再给你详细拆解修改要点:
修复后的完整代码
import urllib.parse import requests # 替换成你的Spotify开发者凭证 CLIENT_ID = "your_client_id_here" CLIENT_SECRET = "your_client_secret_here" # 获取访问令牌 auth_url = "https://accounts.spotify.com/api/token" auth_response = requests.post(auth_url, { 'grant_type': 'client_credentials', 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, }) auth_response_data = auth_response.json() access_token = auth_response_data['access_token'] headers = { 'Authorization': f'Bearer {access_token}' } # 搜索艺术家的核心逻辑 BASE_URL = 'https://api.spotify.com/v1/' artist_name = input("Give artist name: ") # 对艺术家名称进行URL编码,避免特殊字符导致的链接无效 encoded_artist_name = urllib.parse.quote(artist_name) # 正确构造搜索请求 r = requests.get( BASE_URL + 'search', headers=headers, params={ 'q': encoded_artist_name, 'type': 'artist', # 指定搜索类型为艺术家 'limit': 50 # 如果需要筛选艺术家类型,可以添加 'include_groups': 'solo,duo' 这类参数 } ) # 打印请求URL方便调试 print("Request URL:", r.url) # 解析响应数据 response_data = r.json() # 检查响应是否成功 if 'error' in response_data: print(f"API Error: {response_data['error']['message']}") else: print("\nMatching Artists:") # 正确的结果路径是 artists -> items for artist in response_data['artists']['items']: # 处理 genres 为空的情况,避免索引错误 genres = ', '.join(artist['genres']) if artist['genres'] else 'No genres listed' print(f"{artist['name']} --- {genres}")
关键修改要点
- 修正API请求路径:Spotify的搜索API路径是
/v1/search,不需要把艺术家名称和artists拼在路径里,而是通过type参数指定搜索类型为艺术家。你之前的路径构造完全不符合API文档规范,这是导致链接无效的核心原因。 - URL编码搜索关键词:用户输入的名称可能包含空格(比如"Taylor Swift")或特殊字符,直接拼入URL会破坏链接结构,用
urllib.parse.quote()编码后才能保证请求有效。 - 调整请求参数:搜索关键词必须放在
q参数中,同时指定type=artist来过滤结果。原来的include_groups参数是可选的,用来筛选艺术家的组合类型(比如solo、乐队等),不是必填项。 - 修正响应数据解析:Spotify搜索接口的响应是按类型分组的,艺术家结果嵌套在
response_data['artists']['items']里,而不是直接的items,之前的写法会导致KeyError。另外添加了错误处理,方便排查API返回的问题。 - 优化代码可读性:用f-string简化了Authorization头的拼接,同时处理了艺术家流派为空的情况,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Dynax
相关产品推荐
相关产品推荐

