You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Spotipy获取专辑的流派与分类信息

解决方案

问题原因

  • Spotify API 中artist_albums接口返回的是精简专辑对象,本身不携带genre字段
  • sp.albums批量查询返回的专辑对象genres字段平台填充率较低,很多非热门专辑都会返回空值,这是平台侧的正常情况

可行实现方案

优先取专辑自身标注的流派,无标注时 fallback 到艺术家所属流派(对于Talking Heads这类整体风格统一的乐队,流派匹配准确率很高),修改后的代码如下:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import logging

logger = logging.getLogger('artist_albums')
logging.basicConfig(level='INFO')

# 初始化Spotipy客户端,需要提前配置自己的Spotify开发者密钥
sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(
    client_id="你的CLIENT_ID",
    client_secret="你的CLIENT_SECRET"
))

def get_artist(name):
    results = sp.search(q='artist:' + name, type='artist')
    items = results['artists']['items']
    if len(items) > 0:
        return items[0]
    else:
        return None

def get_album_genres(album_id, artist_genres):
    # 先取专辑自身的流派
    album_detail = sp.album(album_id)
    album_genres = album_detail.get('genres', [])
    # 专辑流派为空则用艺术家流派兜底
    if not album_genres:
        album_genres = artist_genres
    return album_genres

def show_artist_albums_with_genres(artist):
    albums = []
    results = sp.artist_albums(artist['id'], album_type='album')
    albums.extend(results['items'])
    while results['next']:
        results = sp.next(results)
        albums.extend(results['items'])
    seen = set()
    albums.sort(key=lambda album: album['name'].lower())
    # 提前拿艺术家流派作为兜底
    artist_genres = artist.get('genres', [])
    res = []
    for album in albums:
        name = album['name']
        if name not in seen:
            genres = get_album_genres(album['id'], artist_genres)
            logger.info(f'ALBUM: {name}, GENRES: {",".join(genres)}')
            seen.add(name)
            res.append({
                "album_name": name,
                "genres": genres
            })
    return res
            
artist = get_artist("Talking Heads")
albums_with_genres = show_artist_albums_with_genres(artist)

额外说明

如果需要更精准的单专辑流派,可以遍历专辑下所有音轨,调用sp.audio_features接口提取音频特征,通过特征聚类匹配对应流派,不过实现复杂度较高,对于风格统一的艺术家没有必要使用。

内容的提问来源于stack exchange,提问作者asd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:05