Community研究与数据分析github.com

Jibbithy/reddit-research

通过 Arctic Shift 存档 API 进行 Reddit 研究——包括子版块分析、互动指标、用户活动、已删除/已移除帖子恢复、语气评估、规则和话题发现。此环境禁止直接访问 reddit.com,因此该技能会明确指出哪些问题无法回答,而不是代之以网页搜索。当用户询问 Reddit 上关于某个话题的看法、需要分析某个子版块或用户、需要从 Reddit 帖子中获取情感或需求信号,或者要求恢复已删除/已移除的帖子时使用。

reddit-research 是什么?

该技能为 AI 助手(如 Claude Code、Cursor 等)提供了一种在受限环境中进行 Reddit 研究的可靠途径。它主要利用 Arctic Shift 存档 API,该 API 是唯一被确认可用的 Reddit 数据源,能够获取历史帖子、评论、互动指标、用户活动以及已删除的内容。技能明确禁止直接通过 curl 或 WebFetch 访问 reddit.com(返回 403),网页搜索也因域名限制被拒绝,Playwright MCP 服务器通常不可用。因此,该技能内置了严格的决策逻辑:对于 Arctic Shift 无法回答的问题(如实时排名、当前订阅数、登录后视图或封禁检查),它会诚实报告“无法回答”并说明原因,而不会悄悄用网页搜索替代。技能还提供了已验证的替代数据源(Hacker News Algolia API、Lobsters、Stack Exchange),用于在无法获取 Reddit 数据时回答“从业者怎么说”之类的问题,但要求明确标注来源并非 Reddit。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jibbithy/claude-code-skills/tree/HEAD/skills/reddit-research

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Reddit 研究技能

通过最可靠的方法进行全面的 Reddit 研究。你确切知道哪些工具可用、哪些不可用,以及何时使用它们。

触发

/reddit-research analyze r/homelab engagement
/reddit-research what subs does u/example_user post in
/reddit-research find deleted posts in r/SUBNAME
/reddit-research discover subreddits about topic X
search reddit for discussions about X
check reddit metrics for these subreddits

方法排名 —— 一条路可用,其余全部失效

最近测试于 2026-09-19。Arctic Shift 是唯一可用的来源。其他所有途径均被屏蔽。 下面的阶梯并非优雅的回退链;其四个阶梯中有三个已不复存在,而关键的失败模式是悄悄用网页搜索替代失效的阶梯,并将结果呈现为 Reddit 数据。

途径2026-09-19 状态证据
Arctic Shift API可用 —— 唯一的一个curl .../api/posts/search?subreddit=selfhosted → 200,返回完整帖子对象
通过 curl 访问 reddit.com .json已失效 —— 403工具链级别的屏蔽;浏览器 User-Agent 也无济于事
在 reddit.com 上使用 WebFetch / WebSearch已失效WebSearch 返回 400 domains not accessible
在 old.reddit.com 上使用 Playwright不可用需要 Playwright MCP 服务器,而该服务器经常连接失败

Arctic Shift —— 主要且实际唯一的途径

  • 基础 URL:https://arctic-shift.photon-reddit.com/api
  • 使用普通 curl。无需认证,无需浏览器,无需工作量证明。
  • 能够看到已删除、已移除和被垃圾邮件过滤的帖子 —— 这是其他任何途径都无法做到的一点。

用于所有用途:历史研究、指标分析、用户活动、规则查看、语气评估、已删除内容恢复。

四个会悄悄破坏运行的陷阱。均经过实际调用验证。

  1. 参数名不直观,错误猜测会导致硬错误。 全文搜索在 /posts/search 上使用 title= 或 selftext=,在 /comments/search 上使用 body=。使用 q 会返回 {"error":"Unknown query parameter: 'q'"}。sort 只接受 asc/desc。
  2. {"error":"Timeout. Maybe slow down a bit"} 在一秒内返回是速率限制,而不是慢查询。 四次未加节奏的调用就足以触发。使用更长的 -m 或更窄的时间窗口重试无效。调用之间间隔约 4 秒,遇到此错误后按指数退避(8→120 秒)。
  3. 任何错误时响应均为 {"data":null,...}。 直接处理 json.data.length 的代码会在速率限制响应上抛出异常,而不是报告错误。在访问 data 之前检查其是否为 null,并在 error 设置时将其暴露出来。
  4. 大约 36 小时内的新帖子带有 hide_score:true 且 score:1 —— 在计算任何指标之前过滤掉它们,否则数据是虚假的。没有按分数排序的功能:需要拉取大量数据并在客户端排序。

当 Reddit 确实无法回答时

如果问题需要实时排名、当前订阅数或登录后的视图,Arctic Shift 无法提供,也没有其他途径可用。在交付物中明确指出这一点。 不要让工作流返回零情感分析结果并被解读为“未找到任何内容”——在此之前,两次研究运行消耗了 206 个智能体,却未产生任何 Reddit 数据,直到这个问题被诊断出来。

以下替代方案已验证可用,并且是回答“从业者怎么说”这类问题的诚实回退方案,前提是你标明来源不是 Reddit:

  • Hacker News(最佳替代方案): https://hn.algolia.com/api/v1/search?query=<terms>&tags=story(或 &tags=comment),然后使用 https://hn.algolia.com/api/v1/items/<objectID> 获取完整评论树。要求每条引用都带有其评论 ID,并重新获取以确认字符串存在。
  • Lobsters: https://lobste.rs/search?q=<terms>&what=stories&order=relevance
  • Stack Exchange: https://api.stackexchange.com/2.3/search/advanced?order=desc&sort=votes&q=<terms>&site=stackoverflow

不可用的方法 —— 永远不要尝试

方法原因结果
使用 curl / WebFetch 访问 reddit.com(任何路径,包括 .json)工具链级别的屏蔽;浏览器 User-Agent 也无法绕过403
使用 site:reddit.com 或 allowed_domains:["reddit.com"] 进行 WebSearch域名不被允许400 domains not accessible
通过 curl 访问 Reddit RSS(.rss)被专门屏蔽403
无 token 访问 oauth.reddit.com重定向到 HTML301 → HTML
redlib / safereddit / libreddit 镜像Anubis 工作量证明中间页,需要 JavaScript挑战页面,0 个帖子
api.pullpush.io(Pushshift 的继任者)宕机502
在 old.reddit.com 前使用 r.jina.ai 代理代理返回 200,但包裹了 Reddit 自身的 403403 内容体

不要浪费一次运行去重新发现这些。如果 Arctic Shift 无法回答,这里也没有任何方法可以。


API 参考

端点、响应字段以及两个来源的陷阱:references/api.md。在构建调用之前阅读它;不要凭记忆重构端点。

互动指标

四个指标(从 Arctic Shift 数据计算)

指标公式衡量内容
评论/点赞比 (cmtRatio)avgCmts / avgScore讨论深度
点赞率upvote_ratio 字段 (0-1)社区认可度
每帖平均评论数sum(num_comments) / count活跃程度
每帖平均分数sum(score) / count覆盖/可见度

计算

const posts = data.data.filter(p => !p.hide_score && p.score > 1);
const avgScore = posts.reduce((s, p) => s + p.score, 0) / posts.length;
const avgCmts = posts.reduce((s, p) => s + p.num_comments, 0) / posts.length;
const cmtRatio = avgCmts / avgScore;
const avgUpvoteRatio = posts.reduce((s, p) => s + p.upvote_ratio, 0) / posts.length;

讨论深度等级

等级阈值含义
S>= 0.70高度对话化
A>= 0.25强讨论
B>= 0.10 或平均评论数 >= 10中等,值得参与
C0.05-0.10主要为被动/覆盖型子版块
D< 0.05低互动
E平均评论数 < 1死亡或严格限制

语气评估

从已获取的帖子数据中进行评估(无需额外调用):

  1. link_flair_text 值 - 主题日、分类、明确指示符
  2. 标题模式 - 语言风格、规范
  3. 高分帖子的 selftext - 文化信号
  4. 分数分布 - 社区实际奖励的内容

在客户端对获取的帖子按分数排序。前 10-20 名揭示社区价值观。


标准工作流程

每种重复性问题的最小调用方案 —— 研究子版块、调查用户、查找帖子、发现子版块、批量检查、恢复已删除帖子、检测封禁:references/workflows.md。

决策流程图

需要 Reddit 数据?
|
+-- 历史帖子、评论、指标、用户活跃度、规则、已删除内容?
|     --> Arctic Shift。这涵盖了该技能实际能回答的所有问题。
|
+-- 实时排名、当前订阅者数量或登录后的视图?
|     --> 不可用。reddit.com 对 curl 和 WebFetch 返回 403;WebSearch 拒绝该域名;
|         Playwright 需要一个通常宕机的 MCP 服务器。
|         在交付物中明确说明。不要悄悄用网页搜索代替。
|
+-- 封禁检查?
|     --> 出于相同原因不可用(它需要 /user/NAME/about.json)。
|
+-- “从业者关于 X 怎么说”,其中 Reddit 只是手段?
|     --> HN Algolia / Lobsters / Stack Exchange,并标注来源并非 Reddit。
|
+-- 发帖、评论、私信、版主邮件?
      --> 无法通过研究工具实现。请使用 Reddit 自己的界面。

诚实缺口规则: 该技能无法回答的问题应报告为无法回答,并说明原因。一个返回零 Reddit 数据且未说明原因的运行,会被解读为“未找到任何内容”,这是一个不同且错误的说法。


范围边界

  • 此技能为只读研究。不支持发帖、评论或写入操作。
  • 如果任务需要发帖或帐户操作,请告知用户必须通过 Reddit 界面或经过身份验证的客户端完成。

相关技能