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

R语言调用Spotify API爬取曲目报错object 'res' not found问题求助

问题修复方案

核心错误原因

  • 你在get_genre_track函数内将API请求返回的解析结果赋值给了track_check变量,但后续遍历曲目列表时全程使用了未定义的res对象调用返回内容,直接触发变量未找到报错。

其他待修正语法问题

  • 自定义函数执行完曲目提取逻辑后没有显式返回结果对象,会导致后续合并数据时拿到空值。
  • 代码末尾多了一个冗余的右大括号,会触发语法报错。
  • 未做API返回为空的兼容判断,遇到无返回结果的流派时会触发长度计算报错。

修正后完整代码

library(httr)
library(purrr)
library(dplyr)

# 获取所有可用流派
genres <- RETRY('GET', url = 'https://api.spotify.com/v1/recommendations/available-genre-seeds', query = list(access_token = get_spotify_access_token(), limit=150), quiet = TRUE) %>% content()

m <- do.call(rbind,lapply(genres$genre, function(x) if(is.null(x)) NA else c(x)))
genres_df <- as.data.frame(m)
colnames(genres_df) <- c("genre")

# 单流派提取50首曲目
get_genre_track <- function(genre){ 
    # 接口请求结果赋值给track_check
    track_check <- RETRY('GET', url = paste0("https://api.spotify.com/v1/search?query=genre%3A",genre),  query = list(type="track",limit = 50, offset = 0, access_token = get_spotify_access_token()), quiet = TRUE) %>% content()
    
    # 兼容无搜索结果的情况
    if(is.null(track_check$tracks$items) || length(track_check$tracks$items) == 0){
        return(tibble(name = character(), genre = character()))
    }

    # 替换所有res为实际存储结果的track_check
    df <- map_df(1:length(track_check$tracks$items), function(this_row) {
        tryCatch({
        this_track <- track_check$tracks$items[[this_row]]
        name <- this_track$name
        genre <- genre
        list(name = name, genre = genre)
      }, error = function(e){
          NULL
      })
    })
    # 显式返回提取结果
    return(df)
}

# 合并所有流派的曲目数据
tracks_df <- lapply(genres_df$genre, get_genre_track) %>% bind_rows()
tracks_df

调整说明

  • 所有未定义的res调用全部替换为实际存储API返回结果的track_check变量
  • 新增空结果兼容逻辑,避免无搜索结果的流派触发运行报错
  • 补充函数返回值声明,确保提取到的曲目数据可以正常传出
  • 删除了代码末尾冗余的右大括号,修正语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:02