项目简介
一款 AI 代理驱动的搜索引擎,聚合 Reddit、X、YouTube、TikTok 等多平台内容,依据真实互动评分并合成有依据的摘要。打破平台孤岛,揭示人们真正关注的话题。
README 预览
# /last30days\n\n\n \n \n \n \n \n \n \n\n\n**An AI agent-led search engine scored by upvotes, likes, and real money - not editors.**\n\nThis README tracks the current v3 pipeline. The runtime skill spec lives in [skills/last30days/SKILL.md](skills/last30days/SKILL.md), which is the source of truth for the latest command and setup behavior.\n\n**Claude Code (recommended — auto-updates via marketplace):**\n```\n/plugin marketplace add mvanhorn/last30days-skill\n/plugin install last30days\n```\n\n**Codex, Cursor, Copilot, Gemini CLI, or any of 50+ [Agent Skills](https://agentskills.io) hosts:**\n```\nnpx skills add mvanhorn/last30days-skill -g\n```\n(`-g` installs globally for your user, available across all projects. Drop it to scope per-project.)\n\nMore install options (claude.ai web, OpenClaw, manual) in the [Install](#install) section below.\n\nZero config. Reddit, HN, Polymarket, and GitHub work immediately. Run it once and the setup wizard unlocks X, YouTube, TikTok, and more in 30 seconds.\n\n---\n\nReddit upvotes. X likes. YouTube transcripts. TikTok engagement. Polymarket odds backed by real money and insider information. That's millions of people voting with their attention and their wallets every day. /last30days searches all of it in parallel, scores it by what real people actually engage with, and an AI agent judge synthesizes it into one brief.\n\nGoogle aggregates editors. /last30days searches people.\n\nYou can't get this search anywhere else because no single AI has access to all of it. Google search doesn't touch Reddit comments or X posts. ChatGPT has a deal with Reddit but can't search X or TikTok. Gemini has YouTube but not Reddit. Claude has none of them natively. Each platform is a walled garden with its own API, its own tokens, its own auth. But you can bring your own keys and browser sessions, and suddenly an AI agent can search all of them at once, score them against each other, and tell you what actually matters.\n\nThat's the un
常见问题 (5)
故障排除如何在不移除 SCRAPECREATORS_API_KEY 的情况下,仅针对 YouTube 禁用 ScrapeCreators 回退?
设置环境变量 LAST30DAYS_YOUTUBE_BACKEND=yt-dlp(在 #1319 中新增)。这会强制 YouTube 仅使用 yt-dlp——不会在转录回退、搜索回填或评论上消耗任何 ScrapeCreators 额度——同时 SCRAPECREATORS_API_KEY 对 X 和 Reddit 等其他来源保持有效。此次更新还改进了 yt-dlp 本身:它现在会自行拉取已上传的字幕和原始语言字幕,并且付费调用在运行结束后即停止。请注意,此前只要设置了该密钥,就会使 yt-dlp 进入快速失败模式(仅进行一次 12 秒的尝试,而不是 3 次带退避的重试和 30 秒超时),因此瞬时的 429 错误会直接转为付费的 SC 调用;该后端标志还会恢复完整的无密钥重试额度。无法完全生效的变通方法:LAST30DAYS_YT_SC_MIN_ITEMS=0 只会禁用 thin-search 回填,而移除密钥则会对所有来源禁用 ScrapeCreators。
故障排除为什么 Instagram reels 搜索对每次查询都返回 404 "No scrapeable reels found" 错误,该如何修复?
/v2/instagram/reels/search 端点在服务提供商层面已经失效——所有查询都返回 HTTP 404(不过不会扣除积分)。修复方法是一个两部分的补丁:(1)在 _user_reels() 中,解包 media 信封结构:it.get("media", it)——否则 _parse_items() 找不到 pk/caption/play_count 字段,会静默丢弃所有 reels。(2)在 search_instagram() 中,当 v2 搜索返回空结果或抛出 HTTPError 时,不要提前返回,而是回退到基于个人资料(profile)的路径:调用 GET /v1/instagram/search/profiles?query=<keyword>(消耗 1 积分),过滤掉粉丝数低于下限的账号,并按粉丝数排序(个人资料匹配比较宽松),然后对排名前 N 的账号请求 GET /v1/instagram/user/reels?handle=<handle>,并将结果截断至 results_per_page。评论可以通过 GET /v2/instagram/post/comments?url=<reel_url> 拉取。总成本:每个关键词约 4-5 积分。仅当回退路径同样没有返回任何结果时,才上报原始的 404 错误。
故障排除如何修复下载 YouTube 自动配音视频的自动字幕时 yt-dlp 出现 "HTTP Error 429: Too Many Requests" 的问题?
对于自动配音的 YouTube 视频,标准的 en 自动字幕轨道总是返回 HTTP 429,而原始语言轨道 en-orig 却能正常下载。修复方法是优先请求 -orig 轨道,因为 yt-dlp 按顺序下载字幕语言,并在遇到第一个错误时停止:
yt-dlp --write-auto-subs --sub-lang en-orig,en --sub-format vtt --skip-download "https://www.youtube.com/watch?v=VIDEO_ID"
在 last30days 技能中,设置字幕语言列表,使每种语言的 -orig 变体排在其之前:
LAST30DAYS_YT_SUB_LANGS=en-orig,en,es-orig,es,pt-orig,pt
这可以避免不必要地回退到付费的 ScrapeCreators 后端(可能会消耗积分并触发 HTTP 402)。该问题已在 last30days 中通过 PR #1319 永久修复,因此升级到最新版本也能解决此问题;LAST30DAYS_YOUTUBE_BACKEND=yt-dlp 可以让 YouTube 转录文本的获取保持免费。
故障排除如何修复 ScrapeCreators 转录回退机制为英语 YouTube 视频返回阿拉伯语或其他错误语言转录文本的问题?
回退逻辑在调用 /v1/youtube/video/transcript 时未携带 language 参数,因此 YouTube 可能会返回自动配音的字幕轨道,例如阿拉伯语。请显式请求首选语言:
curl "https://api.scrapecreators.com/v1/youtube/video/transcript?url=https://www.youtube.com/watch?v=n5bZHETCiJA&language=en"
在集成中,将请求参数修改为:
params={"url": video_url, "language": "en"}
修复后的实现会从 LAST30DAYS_YT_SUB_LANGS(默认值为 en,es,pt)中请求前三个不同的语言,并使用第一个非空的字幕文本。例如,可通过以下方式进行配置:
export LAST30DAYS_YT_SUB_LANGS=en,es,pt
请升级到包含 PR fix(youtube): request the preferred language from the ScrapeCreators transcript fallback 的版本。作为额外的保护措施,请将返回字幕轨道的 language 与所请求的语言进行比较,若两者不匹配,则应将其视为回退失败,而不是接受该外语字幕文本。
故障排除在使用 npx 全局安装 skill 后,如何修复"can't open file skills/last30days/scripts/last30days.py"错误?
这是 v3.14.0 中的一个路径回归问题:setup 和 HTML 导出命令使用了仓库相对路径或已被移除的 ${SKILL_ROOT} 变量,而不是 ${SKILL_DIR}。
在任意工作区中都可使用的临时解决方法:
export SKILL_DIR="$HOME/.agents/skills/last30days"
"${LAST30DAYS_PYTHON:-python3}" "${SKILL_DIR}/scripts/last30days.py" --welcome
或者直接调用已安装的脚本:
python3 "$HOME/.agents/skills/last30days/scripts/last30days.py" setup
对于仓库检出(checkout),请将 SKILL_DIR 设置为 skills/last30days 目录的绝对路径。在 SKILL.md 中,将每一处 skills/last30days/scripts/last30days.py 调用替换为 "${SKILL_DIR}/scripts/last30days.py"。在 references/save-html-brief.md 中,将 "${SKILL_ROOT}/scripts/last30days.py" 替换为 "${SKILL_DIR}/scripts/last30days.py"。PR #1231 已实现此修复。