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

求助:使用tiagomendesdantas/Rspotify批量调用Spotify API失败

嗨,别担心,新手遇到批量处理的问题太正常啦!我来帮你一步步搞定用Rspotify包批量处理多个艺术家的需求~

第一步:整理需要查询的艺术家ID

首先你已经拿到了RapCaviar播放列表的歌曲数据rapcaviar,我们需要从里面提取所有艺术家的ID,而且要去重(避免重复查询同一个艺术家,浪费API请求额度):

library(dplyr)
library(tidyr)

# 从播放列表数据中提取并去重艺术家ID
# 注:Rspotify返回的播放列表数据里,artists列是嵌套的列表结构,所以需要先展开
artist_ids <- rapcaviar %>%
  unnest(artists) %>%  # 展开嵌套的艺术家列表
  pull(id) %>%         # 提取艺术家ID
  unique()             # 去重,保留唯一的艺术家ID

如果你是手动指定要查询的艺术家,直接创建一个包含艺术家ID的向量就行,比如:

# 手动创建艺术家ID列表(示例:Drake、J. Cole、Kendrick Lamar的ID)
my_artist_ids <- c("3TVXtAsR1Inumwj472S9r4", "2YZyLoL8N0Wb9xBt1NhZWg", "2EW2q3XkQ4b0cSvEt4OSM0")

第二步:批量查询艺术家信息

接下来用批量查询的方式获取每个艺术家的信息,这里要注意Spotify API有请求速率限制,所以每次请求之间加个短延迟,避免被限流;另外可以加错误处理,防止个别请求失败导致整个流程中断:

library(purrr)

# 带延迟和错误处理的批量查询
artist_info_list <- map(artist_ids, function(artist_id) {
  Sys.sleep(1)  # 每次请求间隔1秒,避免触发API限流
  tryCatch({
    # 调用getArtist函数获取单个艺术家信息
    getArtist(id = artist_id, token = keys)
  }, error = function(e) {
    # 如果请求失败,打印错误信息并返回空值
    message(paste("查询艺术家ID", artist_id, "失败:", e$message))
    return(NULL)
  })
})

# 将查询结果的列表转换成数据框,方便后续分析
artist_info_df <- dplyr::bind_rows(Filter(Negate(is.null), artist_info_list))

一些注意事项

  • API速率限制:Spotify免费版API有请求次数限制,短时间内大量请求会被暂时封禁,所以Sys.sleep(1)的延迟很重要,必要时可以延长到2秒。
  • 嵌套数据处理:Rspotify返回的很多数据是嵌套列表结构,记得用unnest()展开后再提取需要的字段。
  • 错误排查:如果某个艺术家查询失败,先检查ID是否正确,或者该艺术家是否存在于Spotify数据库中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:23