rsearch について
rsearchは、ブラウザーセッションを通じてRedditの投稿を検索するコマンドラインツールです。Reddit独自のJSON検索エンドポイントをブラウザーのCookieとともに使い、サブレディット、並び順、期間、件数を指定できます。
主な機能
- 01ブラウザー経由でReddit投稿を検索
- 02サブレディットで絞り込み
- 03並び順と期間を指定
- 04整形テキストまたはJSONで出力
- 05検索の並列実行
活用シーン
- 01Reddit全体から話題の投稿を検索
- 02特定のサブレディット内を検索
- 03指定期間の人気投稿を取得
- 04コマンドラインのワークフローで投稿データを利用
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ monotykamary/ browser-harness-js --skill rsearchインストール後、Claude Code で/rsearchを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/rsearchsetuptest詳細
Reddit の検索
ブラウザーを通じて Reddit の投稿を検索します。バックグラウンドタブで www.reddit.com を開き、その後、同一オリジンの fetch('/search.json?…', { credentials: 'include' }) で、ブラウザーの Cookie、UA、Referer を使って Reddit 自身の JSON リスティングエンドポイントにアクセスします。opencli の clis/reddit/search.js をベースにしています。Reddit API キー、OAuth アプリ、スクレイピング用セレクターは不要です。レスポンスは Reddit の正規のリスティング JSON です。各呼び出しで専用のタブと WebSocket セッションを開くため、並列実行しても安全です。
使い方
rsearch "claude code" # up to 15 results, pretty
rsearch "local llm" 5 # 5 results
rsearch --json "stable diffusion" 10 # raw JSON array
rsearch --subreddit programming "git tips" # within one subreddit (r/ prefix optional)
rsearch --sort top --time week "browser automation" # sort + time filter
rsearch "rust async" 3 & # parallel-safe
rsearch "go channels" 3 &
wait
| フラグ | 値 | デフォルト |
|---|---|---|
--json | — | 整形済みテキスト |
--subreddit NAME | 名前のみ、r/name、または /r/name | Reddit 全体 |
--sort S | relevance hot top new comments | relevance |
--time T | all hour day week month year | all |
| 位置引数 2 | 件数、1~100 | 15 |
結果の形式
--json は、opencli のカラムセットを 1 対 1 で反映した投稿の配列を返します。
[
{
"id": "1abc2de",
"title": "Show r/programming: …",
"subreddit": "r/programming",
"author": "someuser",
"score": 1234,
"comments": 210,
"url": "https://www.reddit.com/r/programming/comments/1abc2de/…",
"created_utc": 1735689600,
"selftext": "…",
"post_hint": "link",
"url_overridden_by_dest": "https://example.com/article",
"preview_image_url": "https://preview.redd.it/…",
"gallery_urls": []
}
]
リンク投稿では、外部リンク先が url_overridden_by_dest に格納されます(整形済み出力では -> の後に表示されます)。ギャラリーでは、直接リンクされた i.redd.it の画像が gallery_urls に列挙されます。
注意点
- Node からではなく、ページ経由でリクエストします。 サーバー側から
reddit.com/search.jsonにfetch/curlでアクセスすると、ボット対策でブロックされたり、Cookie のないデフォルト結果が返されたりします。ページ内の fetch は、確定済みのreddit.comオリジン上で、ブラウザーの Reddit Cookie と実際の UA を使って実行されます。これが重要な仕組みです。ログイン中のセッションは自動的に使われます。ログアウト中の検索では、NSFW の結果が通知なく除外されます。 - Reddit では
waitFor('networkIdle')を使わないでください。 SPA は継続的にポーリングするため、500 ミリ秒の通信停止時間が訪れないことがあります。このスクリプトは、必ず発生するPage.frameNavigatedの commit と、短時間のdocument.readyStateポーリングを待機します。fetch に必要なのは確定済みのオリジンであり、ページが完全に構築されることではありません。 - ページ内 fetch にはタイムアウトを設定してください。 CDP 呼び出しには組み込みのタイムアウトがありません。評価処理はノード側の 20 秒タイムアウトと競合させているため、Reddit へのリクエストが停止してもタブを残さずに失敗します。
- JSON 以外のレスポンスや 200 以外のレスポンスは、空の結果ではなくエラーとして表示されます。たとえば、
HTTP 403: Blockedや「ブロックまたはログイン画面を示す非 JSON レスポンス…」というメッセージが表示されます。これは、CLI がバックオフ付きで 2 回再試行した後にのみ発生します。新しい Cookie jar で最初に/search.jsonにアクセスすると、403 のインタースティシャルページが返されます。このレスポンスが再試行を成功させる Cookie を設定するため、継続して失敗する場合は実際にレート制限されていることを意味します。少し待つか、ログイン状態を確認してください。 - 結果数が
countを下回ることがあります。 Reddit はlimitを 100 に制限しており(CLI でも同様に上限を設定しています)、特に小規模なサブレディットでは、指定した件数より少ない結果を返すことがよくあります。 - 複数のフラグの順序:
gmapsと同様、フラグはクエリの前に指定します(rsearch --sort top --time week "query")。
コメント
Markdown 対応