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

如何获取5万条Spotify用户创建的嘻哈风格播放列表ID?

问题:获取5万个用户创建的嘻哈风格Spotify播放列表ID

我需要分析用户创建的Spotify嘻哈风格播放列表及其曲目,目标是收集5万个用户创建的播放列表ID。目前遇到以下障碍:

  • 使用Spotify Search API时,存在1000条数据的查询上限,无法获取足够数量的结果
  • 使用Get Category’s Playlist API仅能返回Spotify官方创建的播放列表,完全无法获取用户创建的内容
  • 曾尝试按字母(如'a'、'b')拆分搜索词来规避Search API限制,但不确定哪些关键词能全面覆盖嘻哈类用户播放列表,随机性太强

以下是我用Spotipy调用Get Category’s Playlist API的代码(运行后仅能获取80-100+条官方播放列表):

import pandas as pd
import numpy as np
import spotipy
import spotipy.util as util
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy.oauth2 as oauth2

# Replace Auth details with your Client ID, Secret
spotify_details = {
    'client_id' : 'Client ID',
    'client_secret':'Client Secret',
    'redirect_uri':'Redirect_uri'}

scope = "user-library-read user-follow-read user-top-read playlist-read-private playlist-read-collaborative playlist-modify-public playlist-modify-private" 

sp = spotipy.Spotify(
        auth_manager=spotipy.SpotifyOAuth(
          client_id=spotify_details['client_id'],
          client_secret=spotify_details['client_secret'],
          redirect_uri=spotify_details['redirect_uri'],    
          scope=scope,open_browser=False))


results = sp.category_playlists(category_id="hiphop", limit = 5, country="US", offset=0)
total = results["playlists"]["total"]
df=pd.DataFrame([],columns = ['id', 'name', 'external_urls.spotify'])
for offset in range(0,total,50):
  results = sp.category_playlists(category_id="hiphop", limit = 50, country="US", offset=offset)
  playlists = pd.json_normalize(results['playlists']['items'])
  #print(playlists.keys)
  df=pd.concat([df,playlists])
df

解决思路

1. 优化Search API关键词策略,系统性覆盖嘻哈类播放列表

放弃随机字母拆分,改用嘻哈领域专属关键词组合分批次查询,每个关键词可获取上限1000条结果,最后去重合并:

  • 核心风格词:hip hop, rap, trap, gangsta rap, boom bap, mumble rap, west coast rap, east coast rap
  • 场景/情绪词:workout hip hop, chill rap, party hip hop, underground rap
  • 地区/文化词:US hip hop, UK drill, afrobeat rap, latino hip hop

2. 利用用户关系链扩散获取播放列表

通过用户关注接口从活跃嘻哈类用户出发,递归抓取播放列表:

  • 先通过Search API搜索hip hop curator、rap playlist maker等关键词,获取一批嘻哈内容活跃用户ID
  • 调用sp.user_playlists(user_id)获取该用户创建/收藏的公开播放列表
  • 调用sp.user_followers(user_id)获取该用户的关注者,继续抓取关注者的播放列表(注意控制API请求频率)

3. 规避API限制的细节处理

  • 严格遵守Spotify API速率限制(常规请求180次/分钟,分页请求40次/分钟),代码中加入time.sleep()控制请求间隔
  • 用集合存储播放列表ID,自动去重
  • 仅抓取公开播放列表,私有播放列表需用户单独授权,无法批量获取

调整后的Search API调用示例代码
import pandas as pd
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import time

# 替换为你的认证信息
spotify_details = {
    'client_id' : '你的Client ID',
    'client_secret':'你的Client Secret',
    'redirect_uri':'你的Redirect URI'}

scope = "playlist-read-public" 
sp = spotipy.Spotify(
        auth_manager=SpotifyOAuth(
          client_id=spotify_details['client_id'],
          client_secret=spotify_details['client_secret'],
          redirect_uri=spotify_details['redirect_uri'],    
          scope=scope, open_browser=False))

# 嘻哈类关键词清单
keywords = ['hip hop', 'rap', 'trap', 'gangsta rap', 'boom bap', 'mumble rap', 
            'west coast rap', 'east coast rap', 'workout hip hop', 'chill rap',
            'party hip hop', 'underground rap', 'UK drill', 'afrobeat rap']

playlist_ids = set()  # 用集合自动去重

for keyword in keywords:
    offset = 0
    while True:
        try:
            results = sp.search(q=f"playlist:{keyword}", type="playlist", limit=50, offset=offset)
            items = results['playlists']['items']
            if not items:
                break  # 无更多结果时退出循环
            
            # 筛选用户创建的播放列表(排除Spotify官方账号)
            for item in items:
                if item['owner']['id'] != 'spotify':
                    playlist_ids.add(item['id'])
            
            offset += 50
            if offset >= 1000:  # 达到Search API单关键词上限
                break
            
            time.sleep(0.5)  # 控制请求速率,避免触发限制
        except Exception as e:
            print(f"查询关键词 {keyword} 时出错: {e}")
            time.sleep(5)  # 出错后等待重试

# 转换为DataFrame保存
df = pd.DataFrame(list(playlist_ids), columns=['playlist_id'])
print(f"共收集到 {len(df)} 个用户创建的播放列表ID")
df.to_csv('hiphop_playlists.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:15:33