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 がファストフェイルモード(バックオフ付きの3回リトライと30秒タイムアウトではなく、12秒の単一試行)に入っていたため、一時的な 429 エラーがそのまま有料の SC 呼び出しに直行していました。このバックエンドフラグは、キーなしの場合の完全なリトライバジェットも復元します。完全には機能しない回避策:LAST30DAYS_YT_SC_MIN_ITEMS=0 は thin-search バックフィルを無効にするだけで、キーを削除するとすべてのソースで ScrapeCreators が無効になります。
トラブル対応Instagramリール検索で、すべてのクエリに対して404「No scrapeable reels found」が返されるのはなぜですか?また、どうすれば修正できますか?
/v2/instagram/reels/search エンドポイントはプロバイダー側で機能が停止しており、すべてのクエリに対して HTTP 404 を返します(ただしクレジットは消費されません)。2つの部分からなるパッチで修正します:(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 エラーは、フォールバックも何も返さなかった場合にのみ報告してください。
トラブル対応yt-dlp で自動ダビング動画の YouTube 自動字幕をダウンロードする際に発生する '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 のトランスクリプト取得を無料のまま維持できます。
トラブル対応英語の YouTube 動画で ScrapeCreators のトランスクリプトフォールバックがアラビア語やその他の間違った言語のトランスクリプトを返す問題を修正するにはどうすればよいですか?
フォールバックは 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={"url": video_url, "language": "en"}
修正された実装は、LAST30DAYS_YT_SUB_LANGS(デフォルト en,es,pt)から最初の3つの異なる言語をリクエストし、最初の空でないトランスクリプトを使用します。例えば、次のように設定します。
export LAST30DAYS_YT_SUB_LANGS=en,es,pt
PR fix(youtube): request the preferred language from the ScrapeCreators transcript fallback を含むリリースにアップグレードしてください。追加の安全策として、返されたトラックの language をリクエストした言語と比較し、不一致の場合は外国語のトランスクリプトを受け入れるのではなく、フォールバックの失敗として扱ってください。
トラブル対応npx でスキルをグローバルにインストールした後に発生する「can't open file skills/last30days/scripts/last30days.py」というエラーを修正するにはどうすればよいですか?
これは v3.14.0 のパスのリグレッションです: setup コマンドと HTML エクスポートコマンドが、${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 で実装されています。