如何修改R语言pullpush.io代码:从comments转submissions并支持多关键词搜索
解决方案
关键改动说明
- 切换API端点:将原代码中拉取评论的
/reddit/search/comment/替换为拉取帖子的/reddit/search/submission/,这是获取submissions的核心调整。 - 多关键词搜索:在
q参数中用+分隔多个关键词(默认是逻辑AND,即帖子需同时包含所有关键词;若需逻辑OR,用|分隔,比如q=GPT|code)。 - 适配Submission字段:Submission的正文字段是
selftext(对应评论的body),新增title字段便于区分帖子,同时简化空值处理逻辑。
修改后的完整代码
library(jsonlite) library(tidyverse) library(httr) # 初始化存储变量 title <- c() selftext <- c() author_created_utc <- c() author_fullname <- c() permalink <- c() # 时间范围设置 after <- as.POSIXct("2022-11-30", tz = "UTC") before <- as.POSIXct("2022-12-01", tz = "UTC") # 指定目标subreddit和搜索关键词 target_subreddit <- "machinelearning" search_keywords <- "GPT+code" # 多关键词用+分隔(AND逻辑),OR逻辑用"GPT|code" repeat { # 构造API请求URL command <- paste0( "https://api.pullpush.io/reddit/search/submission/?", "q=", search_keywords, "&subreddit=", target_subreddit, "&sort=desc&size=100", "&before=", as.integer(before), "&after=", as.integer(after) ) # 发送请求并解析数据 response <- GET(command) submissions <- content(response)$data # 遍历收集数据 for (sub in submissions) { # 收集标题 title <- c(title, ifelse(is.null(sub$title), "无标题", sub$title)) # 收集帖子内容 selftext <- c(selftext, ifelse(is.null(sub$selftext), "", sub$selftext)) # 收集作者创建时间 author_created_utc <- c(author_created_utc, ifelse(is.null(sub$author_created_utc), 0, sub$author_created_utc)) # 收集作者ID author_fullname <- c(author_fullname, ifelse(is.null(sub$author_fullname), "Unknown", sub$author_fullname)) # 收集完整帖子链接 permalink <- c(permalink, ifelse(is.null(sub$permalink), "Unknown", paste0("https://reddit.com", sub$permalink))) } # 推进时间窗口 after <- after + 86400 before <- before + 86400 print(before) # 终止条件:到达结束日期 if (before == as.POSIXct("2023-01-01", tz = "UTC")) { output <- data.frame(title, selftext, author_created_utc, author_fullname, permalink) break # 用break替代stop,避免报错式终止 } }
额外说明
- 关键词逻辑可灵活调整:
- AND逻辑:关键词用
+分隔(如GPT+code,筛选同时包含GPT和code的帖子) - OR逻辑:关键词用
|分隔(如GPT|code,筛选包含GPT或code的帖子)
- AND逻辑:关键词用
- 代码新增
title字段,更贴合帖子的内容特征;同时将permalink补全为完整Reddit链接,方便直接访问。 - 用
ifelse简化空值判断,替代原代码的多分支结构,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Ejudah
相关产品推荐
相关产品推荐

