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

使用RSpotify调用Spotify API获取多位艺术家流派信息遇问题

获取Spotify艺术家流派的修正方案

看起来你在循环处理艺术家列表获取流派时遇到了代码逻辑问题,我帮你梳理下现有代码的问题并给出修正后的实现:

现有代码的明显问题

  • artist_info <- character(artist) 这里的artist未定义,应该指定与艺术家数量匹配的长度,比如character(nrow(Artist_Nam))
  • searchArtist的调用参数不完整,需要明确传入当前循环的艺术家名字,比如Artist_Nam$你的列名[i]
  • 使用ifelse不太适合这里的场景,因为我们需要判断搜索结果是否存在,普通的if-else更直观
  • 没有提取searchArtist返回结果中的genres字段,这才是你需要的流派信息

修正后的循环实现

假设你的Artist_Nam数据框中,艺术家名字的列名为Artist(如果不是,替换成你实际的列名):

# 先确认数据框的列名,确保你用对了艺术家名字的列
colnames(Artist_Nam)

# 初始化一个列表来存储每个艺术家的流派(支持多个流派的情况)
artist_genres <- vector("list", nrow(Artist_Nam))
names(artist_genres) <- Artist_Nam$Artist

# 循环处理每个艺术家
for(i in 1:nrow(Artist_Nam)){
  current_artist <- Artist_Nam$Artist[i]
  # 搜索艺术家,指定type="artist"避免混淆其他类型结果
  search_result <- searchArtist(current_artist, type = "artist")
  
  # 判断是否找到匹配的艺术家
  if(nrow(search_result) > 0){
    # 提取第一个匹配结果的流派,转成逗号分隔的字符串
    artist_genres[[i]] <- paste(search_result$genres[[1]], collapse = ", ")
  } else {
    # 找不到时标记为NA,方便后续处理
    artist_genres[[i]] <- NA_character_
  }
  
  # 可选:添加延迟避免触发Spotify API限流
  Sys.sleep(1)
}

# 转成数据框,方便查看和导出
result_df <- data.frame(
  Artist = Artist_Nam$Artist,
  Genres = unlist(artist_genres),
  stringsAsFactors = FALSE
)

# 查看结果
print(result_df)

更简洁的purrr实现(推荐)

如果你熟悉tidyverse工具包,用purrr的map函数可以替代循环,代码更简洁:

library(purrr)
library(dplyr)

# 定义一个获取单个艺术家流派的函数
get_artist_genres <- function(artist_name){
  search_res <- searchArtist(artist_name, type = "artist")
  if(nrow(search_res) > 0){
    paste(search_res$genres[[1]], collapse = ", ")
  } else {
    NA_character_
  }
}

# 批量处理艺术家列表
result_df <- Artist_Nam %>%
  mutate(
    Genres = map_chr(Artist, ~{
      # 添加延迟避免限流
      Sys.sleep(1)
      get_artist_genres(.x)
    })
  )

注意事项

  • 确保艺术家名字的拼写准确,否则searchArtist可能返回空结果
  • Spotify API有请求频率限制,批量处理时记得加Sys.sleep(1)之类的延迟,避免被限流
  • 如果搜索返回多个结果(比如同名艺术家),默认取第一个最匹配的,你可以根据需要添加过滤逻辑(比如结合艺术家的热门曲目等信息)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:17