mcpField
R
reddit-post

reddit-post

github.com/phy041マーケティング・グロース4759 回インストール17 週間前に更新
リポジトリ

reddit-post について

macOS上でユーザーがログイン済みのChromeをAppleScriptで操作し、Redditにテキスト投稿やリンク投稿を行うスキルです。投稿手順のほか、サブレディット選び、フレア設定、エラー対応も扱います。

主な機能

  1. 01テキスト投稿とリンク投稿
  2. 02AppleScriptによるChrome操作
  3. 03投稿URLの取得とフレア設定
  4. 04サブレディット選びと投稿時刻の案内
  5. 05スパム判定とエラーへの対処

活用シーン

  1. 01Redditでプロジェクトを告知
  2. 02関連サブレディットでツールを紹介
  3. 03投稿後に必須フレアを設定

インストール

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

$npx skills add https://github.com/phy041/claude-skill-reddit --skill reddit-post

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

詳細

Reddit 投稿スキル(AppleScript による Chrome 操作)

AppleScript でユーザーが実際に使用している Chrome を操作して Reddit に投稿します。Playwright、Selenium、API トークンは使用しません。


仕組み

Claude Code → osascript → Chrome (real browser, logged in) → Reddit /api/submit
  • Cookie を使った同一オリジンの fetch → 検出不能
  • テキスト/リンク投稿には Reddit の /api/submit エンドポイントを使用
  • CSRF 保護には /api/me.json から取得した Modhash を使用

前提条件

  • macOS のみ(AppleScript は macOS のテクノロジーです)
  • Chrome:表示 → デベロッパー → Apple Events からの JavaScript を許可(有効にした後、Chrome を再起動してください)
  • Chrome で Reddit にログインしていること

方法の判定(最初に実行)

WINDOWS=$(osascript -e 'tell application "Google Chrome" to return count of windows' 2>/dev/null)
if [ "$WINDOWS" = "0" ] || [ -z "$WINDOWS" ]; then
    echo "METHOD 2 (System Events + Console)"
else
    echo "METHOD 1 (execute javascript)"
fi

方法 1 と方法 2 の詳細については、reddit-cultivate スキルを参照してください。


投稿ワークフロー

ステップ 1:Modhash を取得
osascript -e 'tell application "Google Chrome" to tell active tab of first window to execute javascript "fetch(\"/api/me.json\",{credentials:\"include\"}).then(r=>r.json()).then(d=>{document.title=\"UH:\"+d.data.modhash})"'
sleep 2
osascript -e 'tell application "Google Chrome" to return title of active tab of first window'
ステップ 2:投稿を送信

まず Chrome で reddit.com に移動し(同一オリジンが必要です)、その後送信します。

(async()=>{
  try {
    let body = new URLSearchParams({
      sr: "SideProject",           // subreddit name (no r/ prefix)
      kind: "self",                // "self" for text, "link" for URL
      title: "Your post title",
      text: "Your post body with **markdown** support",
      uh: "MODHASH_HERE",
      api_type: "json",
      resubmit: "true"
    });
    let resp = await fetch("/api/submit", {
      method: "POST",
      credentials: "include",
      headers: {"Content-Type": "application/x-www-form-urlencoded"},
      body: body.toString()
    });
    let result = await resp.json();
    document.title = "POSTED:" + JSON.stringify(result);
  } catch(e) {
    document.title = "ERR:" + e.message;
  }
})()

リンク投稿の場合は、次のように変更します。

kind: "link",
url: "https://github.com/your/repo",  // instead of text
ステップ 3:投稿リンクを抽出

レスポンスには result.json.data.url が含まれます。これは新しい投稿への直接リンクです。

ステップ 4:フレアを追加(必要な場合)

フレアを必須とするサブレディットもあります。投稿後、次を使用します。

(async()=>{
  try {
    // First get available flairs
    let resp = await fetch("/r/SUBREDDIT/api/link_flair_v2", {credentials: "include"});
    let flairs = await resp.json();
    document.title = "FLAIRS:" + JSON.stringify(flairs.map(f => ({id: f.id, text: f.text})));
  } catch(e) {
    document.title = "ERR:" + e.message;
  }
})()

その後、フレアを適用します。

(async()=>{
  try {
    let body = new URLSearchParams({
      link: "t3_POST_ID",
      flair_template_id: "FLAIR_ID",
      uh: "MODHASH"
    });
    await fetch("/api/selectflair", {
      method: "POST",
      credentials: "include",
      headers: {"Content-Type": "application/x-www-form-urlencoded"},
      body: body.toString()
    });
    document.title = "FLAIR_SET";
  } catch(e) {
    document.title = "ERR:" + e.message;
  }
})()
ステップ 5:セッションの概要

必ず投稿リンクで締めくくってください。

サブレディットタイトル投稿リンク
r/SideProject"Your title"https://www.reddit.com/r/SideProject/comments/abc123/...

スパムフィルターの回避

タイトル/本文で避ける単語
避ける語句代わりに使う語句
crawl、crawled、crawlingcompiled、cataloged、indexed、collected
scrape、scrapinggathered、extracted、retrieved
bot、automatedtool、script、program
free(多用されている語句)open source、MIT licensed
hack、hackstips、techniques、methods
避けるべきコンテンツのトリガー
  • 外部リンクを複数含める(最大 1~2 件)
  • URL 短縮サービス(bit.ly、tinyurl)
  • 新しいアカウントでの宣伝コンテンツ
  • 短時間に複数のサブレディットへ同じコンテンツを投稿すること
  • 過度な自己宣伝の表現

オープンソースプロジェクトにおすすめのサブレディット

サブレディットメンバー数おすすめの内容備考
r/coolgithubprojects60KGitHub リポジトリまさにこのための場所です!
r/SideProject453K個人プロジェクトとても歓迎されます
r/opensource100K+オープンソースツール技術者が多いコミュニティ
r/programming6M+開発ツール競争が激しい
r/Python1.5M+Python ツール活発なコミュニティ
r/webdev2M+Web ツール「Showoff Saturday」のみ
r/selfhosted400K+セルフホスト可能なツール反応が良好

おすすめの投稿時間(米国東部時間)

曜日おすすめの時間
月曜日6-8 AM
火曜日7-9 AM
水曜日8-10 AM
木曜日7-9 AM
金曜日6-8 AM
土曜日7-9 AM
日曜日8-10 AM

勢いをつけるため、ピーク時間の 30 分前に投稿してください。


投稿テンプレート

オープンソースプロジェクトのお知らせ
Title: I built [PROJECT_NAME] - [one-line description] (open source)

Body:
Hey everyone,

I created [PROJECT_NAME] to solve [PROBLEM].

**What it does:**
- Feature 1
- Feature 2
- Feature 3

**Tech stack:** [Languages/frameworks]

**Links:**
- GitHub: [single link]

Happy to answer any questions!
ツール/リソースの紹介
Title: [TOOL_NAME]: [what it does] - free and open source

Body:
Built this because [reason/pain point].

**Features:**
- [List 3-5 key features]

**How to use:**
[Brief code example or instructions]

GitHub: [link]

Feedback welcome!

クロスポスト戦略

リーチを最大化するため、サブレディットへの投稿を時期をずらして行います。

  1. 1 日目:主要なサブレディット(最も関連性が高い場所)
  2. 2~3 日目:別のサブレディット(異なる読者層)
  3. 4~5 日目:一般的なサブレディット(r/SideProject など)

同じ日に複数のサブレディットへ投稿しないでください。スパム検出のトリガーになります。


エラーからの復旧

問題解決策
"Post removed by filters"トリガーとなる語句を使わずに書き直し、リンクを減らします
"You're doing that too much"10~15 分待ちます。カルマがさらに必要です
"This community requires flair"投稿後に /api/selectflair を使用します
"Title too long"300 文字以内にします
投稿が表示されないシャドウバンされていないか、シークレットモードでプロフィールを確認します
Modhash の期限切れ/api/me.json から再取得します

AppleScript を使う理由(Playwright ではなく)

ツール問題
Playwrightnavigator.webdriver=true が設定され、Reddit に検出されます
Selenium同じ検出上の問題があります
curl + API数回リクエストすると IP がブロックされます
AppleScript実際の Chrome を操作し、検出されず、Cookie も含まれます

コメント