mcpField
R
rsearch

rsearch

github.com/monotykamary生産性439 回インストール今日更新
リポジトリ

rsearch について

rsearchは、ブラウザーセッションを通じてRedditの投稿を検索するコマンドラインツールです。Reddit独自のJSON検索エンドポイントをブラウザーのCookieとともに使い、サブレディット、並び順、期間、件数を指定できます。

主な機能

  1. 01ブラウザー経由でReddit投稿を検索
  2. 02サブレディットで絞り込み
  3. 03並び順と期間を指定
  4. 04整形テキストまたはJSONで出力
  5. 05検索の並列実行

活用シーン

  1. 01Reddit全体から話題の投稿を検索
  2. 02特定のサブレディット内を検索
  3. 03指定期間の人気投稿を取得
  4. 04コマンドラインのワークフローで投稿データを利用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/monotykamary/browser-harness-js --skill rsearch

インストール後、Claude Code で/rsearchを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
rsearch
setup
test

詳細

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/nameReddit 全体
--sort Srelevance hot top new commentsrelevance
--time Tall hour day week month yearall
位置引数 2件数、1~10015

結果の形式

--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")。

コメント