OpenSource-Hub

last30days-skill

CLI 도구

mvanhorn/last30days-skill

여러 소셜 플랫폼에 걸친 AI 리서치 스킬, 근거를 확인할 수 있는 요약 생성.

개요

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

FAQ (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가 업로드된 자막과 원본 언어 캡션을 스스로 가져오며, 실행이 끝나면 유료 호출이 중단됩니다. 참고로 이전에는 키가 설정되어 있는 것만으로도 yt-dlp가 fast-fail 모드(백오프를 적용한 3회 재시도와 30s 타임아웃 대신 단일 12s 시도)로 전환되어, 일시적인 429 오류가 곧바로 유료 SC 호출로 넘어갔습니다. 백엔드 플래그는 전체 키리스 재시도 한도도 복원합니다. 완전히 작동하지 않는 우회 방법: LAST30DAYS_YT_SC_MIN_ITEMS=0은 thin-search 백필만 비활성화하며, 키를 제거하면 모든 소스에서 ScrapeCreators가 비활성화됩니다.

원본 Issue #1316
문제 해결
왜 Instagram reels 검색이 모든 쿼리에 대해 404 "No scrapeable reels found"를 반환하며, 어떻게 수정할 수 있나요?

/v2/instagram/reels/search 엔드포인트는 프로바이더 수준에서 작동하지 않습니다 — 모든 쿼리에 대해 HTTP 404를 반환합니다(다만 크레딧은 차감되지 않습니다). 두 부분으로 구성된 패치로 수정하세요: (1) _user_reels()에서 미디어 엔벨로프를 언래핑하세요: it.get("media", it) — 그렇지 않으면 _parse_items()가 pk/caption/play_count 필드를 찾지 못해 모든 릴을 아무 경고 없이 버립니다. (2) search_instagram()에서 v2 검색이 빈 결과를 반환하거나 HTTPError를 발생시키면, 조기 반환하는 대신 프로필 기반 경로로 폴백하세요: 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 오류를 표출하세요.

원본 Issue #1020
문제 해결
자동 더빙된 동영상의 YouTube 자동 자막을 다운로드할 때 발생하는 yt-dlp 'HTTP Error 429: Too Many Requests' 오류를 해결하는 방법

자동 더빙된 YouTube 동영상에서는 표준 en 자동 자막 트랙이 항상 HTTP 429를 반환하는 반면, 원본 언어 트랙인 en-orig는 정상적으로 다운로드됩니다. yt-dlp는 자막 언어를 순서대로 다운로드하다가 첫 번째 오류에서 중단되므로, -orig 트랙을 먼저 요청하여 문제를 해결합니다:

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가 발생할 수 있음)을 방지할 수 있습니다. 이 문제는 PR #1319를 통해 last30days에서 영구적으로 수정되었으므로, 최신 버전으로 업그레이드해도 해결됩니다. LAST30DAYS_YOUTUBE_BACKEND=yt-dlp는 YouTube 트랜스크립트 가져오기를 무료로 유지합니다.

원본 Issue #1314
문제 해결
ScrapeCreators 트랜스크립트 폴백이 영어 YouTube 동영상에 대해 아랍어 또는 다른 잘못된 언어의 트랜스크립트를 반환하는 문제를 어떻게 해결하나요?

폴백이 language 매개변수 없이 /v1/youtube/video/transcript를 호출하므로, YouTube는 아랍어와 같은 자동 더빙 자막 트랙을 반환할 수 있습니다. 원하는 언어를 명시적으로 요청하세요:

curl "https://api.scrapecreators.com/v1/youtube/video/transcript?url=https://www.youtube.com/watch?v=n5bZHETCiJA&language=en"

통합 코드에서 요청 params를 다음과 같이 변경하세요:

params={"url": video_url, "language": "en"}

수정된 구현은 LAST30DAYS_YT_SUB_LANGS(기본값 en,es,pt)에서 서로 다른 처음 세 개의 언어를 요청하고, 비어 있지 않은 첫 번째 자막을 사용합니다. 예를 들어 다음과 같이 설정하세요:

export LAST30DAYS_YT_SUB_LANGS=en,es,pt

fix(youtube): request the preferred language from the ScrapeCreators transcript fallback PR이 포함된 릴리스로 업그레이드하세요. 추가 안전 장치로, 반환된 트랙의 language를 요청한 언어와 비교하여 일치하지 않는 경우 외국어 자막을 수락하는 대신 폴백 실패로 처리하세요.

원본 Issue #1169
문제 해결
npx로 스킬을 전역 설치한 후 "can't open file skills/last30days/scripts/last30days.py" 오류를 어떻게 해결하나요?

이것은 v3.14.0 경로 회귀 문제입니다: setup 및 HTML-export 명령이 ${SKILL_DIR} 대신 저장소 상대 경로나 제거된 ${SKILL_ROOT} 변수를 사용합니다.

모든 워크스페이스에서 사용할 수 있는 즉시 우회 방법:

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

저장소 체크아웃의 경우, 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에서 이 수정 사항을 구현합니다.

원본 Issue #818