tap
Back

reddit/hot

redditRead-only

获取 subreddit 热门帖子(或 Reddit 首页)

www.reddit.com
Last 7 days
0
Last 30 days
0
All time
0
reddit/hot.js
/* @meta
{
  "name": "reddit/hot",
  "description": "获取 subreddit 热门帖子(或 Reddit 首页)",
  "domain": "www.reddit.com",
  "args": {
    "subreddit": {"required": false, "description": "Subreddit name without r/ prefix (omit for front page)"},
    "count": {"required": false, "description": "Number of posts (default 25, max 100)"},
    "after": {"required": false, "description": "Fullname of the last item for pagination (e.g. t3_abc123)"}
  },
  "capabilities": ["network"],
  "readOnly": true,
  "example": "tap site reddit/hot ClaudeAI"
}
*/

async function(args) {
  const count = Math.min(parseInt(args.count) || 25, 100);
  const base = args.subreddit ? '/r/' + args.subreddit : '';
  let url = base + '/hot.json?limit=' + count + '&raw_json=1';
  if (args.after) url += '&after=' + args.after;

  const resp = await fetch(url, {credentials: 'include'});
  if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: resp.status === 404 ? 'Subreddit not found' : 'API error'};
  const d = await resp.json();
  if (!d.data?.children) return {error: 'Unexpected response', hint: 'Reddit may be rate-limiting or returning a login page'};

  const posts = d.data.children.map((c, i) => ({
    rank: i + 1,
    id: c.data.name,
    title: c.data.title,
    author: c.data.author,
    subreddit: c.data.subreddit_name_prefixed,
    score: c.data.score,
    upvote_ratio: c.data.upvote_ratio,
    num_comments: c.data.num_comments,
    created_utc: c.data.created_utc,
    url: c.data.url,
    permalink: 'https://www.reddit.com' + c.data.permalink,
    selftext_preview: (c.data.selftext || '').substring(0, 200),
    is_self: c.data.is_self,
    link_flair_text: c.data.link_flair_text || null
  }));

  return {
    subreddit: args.subreddit || 'front page',
    count: posts.length,
    after: d.data.after || null,
    posts
  };
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: 91d2c047a9d8