调用Genius API获取歌曲数据返回全NA,求助问题排查
排查Genius API获取歌曲数据返回全NA的问题
验证API授权有效性
先确认Genius API Token配置正确且未过期。在非并行环境下,单独调用目标函数(比如search_genius_songs(已知有效artist_id)),如果直接调用也无返回或报错,大概率是Token无效、权限不足或请求次数超限。核对函数参数与调用逻辑
部分R包(如geniusr)中,search_genius_songs是按关键词搜索的通用函数,并非专门用于获取指定艺术家的歌曲。正确获取艺术家歌曲应该使用get_artist_songs(artist_id)这类针对性函数。你可能误用了函数,导致搜索结果为空,触发tryCatch返回NA。优化错误捕获逻辑,暴露具体问题
当前的tryCatch直接返回NA,掩盖了错误细节。修改函数打印错误信息,才能精准定位问题:fetch_songs <- function(artist_id) { songs_data <- tryCatch({ # 替换为正确的艺术家歌曲获取函数 get_artist_songs(artist_id) }, error = function(e) { message("处理artist_id: ", artist_id, " 时出错: ", e$message) return(NA) }) return(songs_data) }运行后查看控制台的错误提示,比如API请求被拒绝、参数格式错误等。
排查并行请求的环境问题
future_lapply的并行进程可能未继承API Token的配置,导致每个并行请求都未授权。先改用普通lapply测试,如果普通循环能返回数据,说明需要在并行函数中重新加载Token,或确保环境变量在并行进程中正确传递。检查API限流与网络问题
Genius API有请求频率限制,短时间大量并行请求会触发限流。可以在fetch_songs函数中添加Sys.sleep(1)增加请求间隔,避免被限流。同时确认网络能正常访问Genius API服务器,无防火墙或代理拦截。
内容的提问来源于stack exchange,提问作者JF96
相关产品推荐
相关产品推荐

