如何使用stackr库调用Stack Exchange API获取用户徽章详情?
获取Stack Exchange用户具体徽章详情的方法(使用stackr库)
嘿,我懂你想要的不只是徽章总数,而是每个徽章的具体名称、描述这些细节对吧?用stackr库完全能实现,核心就是利用Stack Exchange API的filter系统——默认的请求只会返回精简数据,我们需要自定义filter来获取徽章的详细信息,下面给你一步步说明:
1. 基础操作:用预定义filter获取徽章基本信息
stackr库提供了预定义的withbadges filter,专门用来返回用户的徽章详情。直接在stack_users()函数里指定这个filter即可:
library(stackr) # 替换成你要查询的用户ID和目标站点(比如stackoverflow) target_user_id <- "12345" target_site <- "stackoverflow" # 获取带详细徽章的用户数据 user_data <- stack_users( user_id = target_user_id, site = target_site, filter = "withbadges" ) # 提取徽章列表 badges_list <- user_data$items[[1]]$badges # 遍历输出每个徽章的名称和描述 for (badge in badges_list) { cat("🔹 徽章名称:", badge$name, "\n") cat(" 描述:", badge$description, "\n\n") }
2. 进阶:自定义filter获取更多徽章字段
如果你还想获取徽章的等级(金/银/铜)、获得日期等更多信息,可以自己构建自定义filter。用stack_filter()函数就能创建包含指定字段的filter:
# 创建自定义filter,包含徽章名称、描述、等级、获得时间 custom_filter <- stack_filter( include = c( "items.badges.name", "items.badges.description", "items.badges.rank", "items.badges.awarded_date" ), site = target_site ) # 使用自定义filter请求数据 user_data_with_full_badges <- stack_users( user_id = target_user_id, site = target_site, filter = custom_filter$filter ) # 提取并输出完整徽章信息 full_badges_list <- user_data_with_full_badges$items[[1]]$badges for (badge in full_badges_list) { cat("🔹 徽章名称:", badge$name, "\n") cat(" 等级:", stringr::str_to_title(badge$rank), "\n") cat(" 描述:", badge$description, "\n") cat(" 获得日期:", as.Date(as.POSIXct(badge$awarded_date, origin = "1970-01-01")), "\n\n") }
注意事项
- 如果你的请求频率较高,建议设置Stack Exchange API密钥(通过
Sys.setenv(STACK_EXCHANGE_KEY = "你的密钥")),这样能提升调用限制; - 不同站点的徽章体系略有差异,确保
site参数指定正确(比如stackoverflow、serverfault等); - 若返回结果为空,先检查用户ID是否正确,以及该用户是否有公开的徽章数据。
内容的提问来源于stack exchange,提问作者Pozmanski
相关产品推荐
相关产品推荐

