ブログに戻る

2026年のRedditデータ収集方法:API制限、非公開.json、プロキシの役割

2026年5月、Redditは非認証の.jsonを閉鎖し、robots.txtはすべてに対してDisallow: /を返します。公式のData APIの実際の制限(100 QPM、1000回の呼び出しあたり$0.24)、持続可能なパイプラインのステップバイステップのスキーム、1000要素のリスティングキャップ、そしてこのスキームでプロキシが実際に解決するタスクとそうでないタスクについて解説します。

📅2026年7月28日
2026年のRedditデータ収集方法:API制限、非公開.json、プロキシの役割
```html

2026年5月、Redditは非認証アクセスを.jsonエンドポイントに対して閉鎖しました。これは「任意のURLに.jsonを追加する」というトリックで、何年も多くのスクリプト、ダッシュボード、ペットプロジェクトが依存していました。2026年7月28日の確認では、通常のブラウザのUser-Agentでhttps://www.reddit.com/r/webscraping/top.json?t=weekにリクエストを送ると、403 Forbiddenが返されます。同時に、Redditのrobots.txtには、User-agent: *Disallow: /の2行しか含まれておらず、Public Content Policyに言及しています。

これは「どうやって回避するか」ではなく、今後どのようにRedditのデータ収集パイプラインを構築するかを変えます。以下は2026年の実用的なスキームです:実際にアクセス可能なもの、制限、プロキシが必要な場所、そしてそれが役に立たない場所。

何が壊れたのか:短い年表

  • 2023年6月 — Redditは高負荷アプリケーション向けに1000回のAPI呼び出しあたり$0.24の有料プランを導入しました。その結果、Apolloが閉鎖され(開発者はアクセスのコストを年間約2000万ドルと見積もっていました)、ほとんどのサードパーティクライアントが去り、Pushshift(投稿とコメントの公開アーカイブ)が停止しました。これは学術研究の半分を支えていました。
  • 2026年5月 — 非認証の.jsonが廃止されました。「単にURLを引っ張る」ツールは機能しなくなり、トラフィックはセッション確認を伴うCloudflare保護を通過することになりました。
  • 2025年10月から現在まで — RedditはPerplexity AI、Oxylabs UAB、AWMProxy、SerpApiに対して訴訟を起こしました(ニューヨーク南部地区、判事エンゲルマイヤー)。Redditは被告がGoogleの検索結果を通じて自社コンテンツを商業的に抽出し、データを再販していると非難し、DMCAの逆回避条項を引用しています。第1回修正訴訟が提出され、2026年3月の時点で訴訟は棄却動議の段階にあります。被告は違反を否定しています:Perplexityはこれを公共データを閉じる試みと呼び、SerpApiとOxylabsは法律の範囲内で公共ウェブへのアクセスを主張しています。

第三のポイントからの実用的な結論は、Redditのデータ収集を公式APIを回避して行うことは、技術的なリスクではなく法的なリスクであるということです。商業プロジェクトにおける誤りの代償は、禁止措置ではなく訴訟で測られます。2026年におけるデータ抽出に関する裁判所の解釈については、GoogleとSerpApiの裁判の決定に関する資料で詳しく説明しています。

公式データAPI:2026年の実際の制限

これは法的な請求を生じさせない唯一の方法です。設計前に知っておくべき数字は以下の通りです:

  • OAuthクライアントの場合、1分あたり100リクエスト。ウィンドウは約10分で平均化されるため、短いスパイクは許容されます。
  • OAuthなしの場合、1分あたり10リクエスト — これはデバッグ以外には何も足りません。
  • 制限はアプリケーションキーに対してカウントされ、最終ユーザーにはカウントされません。1つのトークンで5つのスレッドを持っても、5倍の容量にはなりません — 単に予算を5倍速く消費するだけです。
  • 無料プランは個人プロジェクト、ボット、モデレーター用ツール、学術研究をカバーします。金銭的なカウントはなく、頻度の上限のみがあります。
  • 商業利用には契約と手動承認が必要です;料金は1000回の呼び出しあたり$0.24です。業界の見積もりによれば、商業契約の参入障壁は年間約$12,000から始まります。
  • APIデータでのMLモデルのトレーニングは明示的に禁止されていますデータAPIの条件により。トレーニングライセンスは別途プライベート契約です(RedditとGoogleの取引は報道で年間約6000万ドルと評価されました)。

常にパースすべきヘッダー

Redditは各レスポンスに3つのヘッダーを返します:X-Ratelimit-UsedX-Ratelimit-RemainingX-Ratelimit-Reset。これはあなたの予算に関する唯一の信頼できる情報源です — コード内の定数でもなく、「1分あたり60リクエスト」という古いウィキでもありません(これは2023年にすでに古くなっています)。

User-Agentの要件

Redditは、platform:app_id:version (by /u/username)形式のユニークな説明的な文字列を期待しています。一般的で空のUser-Agentは頻度が厳しく制限されます — 制限が予想より早く終了する場合、最初に確認すべきことです。

ステップバイステップ:落ちないパイプラインを構築する方法

  1. Redditの設定でscript-appを登録し、client_id/client_secretを取得します。読み取り専用の負荷には、これが最も簡単なアプリケーションタイプです。
  2. 上記の形式に従って正しいUser-Agentを設定します。他のチュートリアルから文字列をコピーしないでください — app_idとユーザー名はあなたのものでなければなりません。
  3. 各レスポンスでX-Ratelimit-Remainingを読み取ります、エラー時だけでなく。残りが約20リクエストに減ったら、均等なペースに切り替えます:呼び出しの遅延 = リセットまでの秒数 ÷ 残りのリクエスト。こうすることで、壁にぶつかるのではなく、ウィンドウに予算を分散させます。
  4. 429を正しく処理します。最初の待機時間はRetry-Afterヘッダーから取得します。その後は、エクスポネンシャルバックオフとジッターを使用します:wait = 2^attempt + random()。ジッターは必須です:これがないと、並行クライアントがリクエストを同期的に繰り返し、二次的な障害のカスケードを引き起こします。
  5. TTLを持つ読み取りをキャッシュします。同じリスティングの再リクエストは、モニタリングプロジェクトでのクォータ消費の最も一般的な原因です。
  6. スレッドではなくトークンのローテーションでスケールします。各OAuthトークンは独立したカウンターを持ちます;異なるアカウントの複数のアプリケーションをラウンドロビンで分配する(Pythonではitertools.cycle)ことで、スループットを線形に増加させます。重要な点:商業負荷の場合、これはRedditとの契約を置き換えるものではありません — これは公正な制限内に収まる方法であり、回避する方法ではありません。
  7. リスティングキャップを回避するための計画を立てます。Redditはリスティングあたり最大約1000要素(ページあたり100、カーソルafter)を返します。古いコンテンツは標準のエンドポイントを通じてはアクセスできません。標準的な解決策は、キャップを「突破する」ことではなく、時間でサンプリングを切り分け、広範なリクエストの代わりにいくつかの狭いリクエストを行うことです。
  8. 歴史的データについては、APIではなくインデックスを探します。Pushshiftの閉鎖後、そのニッチはPullPushのような外部インデックス(無料ですがSLAなし)や、自社のインデックスと他の制限を持つ商業的な検索APIが占めています。学術研究のために、RedditにはReddit for Researchersという別のプログラムがあります。

遅れて気づく落とし穴

PRAWは流れを抑えますが、すべてから守るわけではありません。組み込みのリミッターPRAWはヘッダーを読み取り、自動的に待機時間を設定します — これは単一スレッドのスクリプトに対して非常に効果的です。現在の状態はreddit.auth.limitsで確認できます。これが壊れるのは2つのケースで:共通のクレデンシャルを持つマルチスレッド環境(インスタンスは互いの消費を見えません)と、ブロッキングtime.sleepがイベントループをハングさせるasyncコードです。

AIエージェントはクォータを目立たず消費します。エージェントの1ステップの推論は簡単に10〜15回のツール呼び出しに展開されます。10の並行セッションは100〜150の同時リクエストを意味し、つまり1分の予算を数秒で消費します。Redditの上にエージェントを構築する場合、リミッターはプールレベルで必要であり、個別の呼び出しではありません。

バックオフなしのポーリング。「N秒ごとに更新を確認する」ことは、エクスポネンシャルな待機時間なしで行うと、一般的なトークンの後に429の2番目に多い原因になります。

ここで本当にプロキシが必要な場所とそうでない場所

率直に言って、プロキシは公式APIの制限を増やしません。クォータはアプリケーションキーに結びついており、出力IPには結びついていません。アドレスを変更して「増やそう」とする試みは機能せず、条件に反します。プロキシがRedditパイプラインで実際に解決するタスクは他にあります:

  • 地理的アクセスと接続性。Redditは一部の国で利用できないか部分的に制限されています。また、企業ネットワークはそれをソーシャルネットワークとして制限します。必要な地域に安定した出口ノードがあることは、制限を回避するのではなく、インフラの可用性の問題です。サーバーサイドのタスクには、通常はデータセンタープロキシで十分です。
  • 地域の出力。Redditはリクエストの地理に応じて一部のコンテンツや推奨を返します;特定の国のオーディエンスが何を見ているかを分析する場合、その国からの出口が必要です。
  • インフラの分散。複数の独立したサービス(収集、言及のモニタリング、分析)が同じサーバー上に存在する場合、単一のIPはすべての統合の共通の障害点になります。
  • 自分のアカウントでの作業。モデレーション、コミュニティの運営、合法的なSMM活動を複数のプロフィールで行うためには、「アカウント ↔ 固定IP」の組み合わせが基本的な衛生です。ここでは、レジデンシャルプロキシがstickyセッションで適しています。

しかし、プロキシができないことは:契約を回避して商業的な収集を合法化すること、1000要素のリスティングキャップを解除すること、そしてDisallow: /をrobots.txtで取り消すことです。プラットフォームの制限に関する一般的なアプローチは、APIにおけるレート制限とプロキシの役割の分析で説明されています。

結論

2026年のRedditは「取れるオープンデータセット」ではなくなりました。実用的なスキームは次のようになります:公式OAuthアクセス + ヘッダーに基づく公正なリミッター + ルールに従ったトークンのローテーション + 歴史のための外部インデックス。このスキームにおけるプロキシの役割は、クォータを回避するのではなく、可用性と地理を確保することです — これが彼らが予測可能な結果を提供する唯一の役割です。

商業プロジェクトの場合、Redditとの契約の予算を事前に計画してください:Perplexity、Oxylabs、SerpApiとの法的歴史は、プラットフォームが自社データを保護するために合法的なアクセスのコストよりもはるかに多くを費やす準備ができていることを示しています。

```