بازگشت به وبلاگ

چگونه در سال ۲۰۲۶ داده‌های Reddit را جمع‌آوری کنیم: محدودیت‌های API، فایل‌های .json خصوصی و نقش پروکسی

در مه ۲۰۲۶، Reddit .json غیرمعتبر را بست و robots.txt برای همه Disallow: / را ارائه می‌دهد. محدودیت‌های واقعی API داده‌های رسمی (۱۰۰ QPM، ۰.۲۴ دلار برای ۱۰۰۰ فراخوانی) را بررسی می‌کنیم، طرح گام به گام یک پایپ‌لاین پایدار، لیست‌کردن حداکثر در ۱۰۰۰ عنصر و اینکه کدام وظایف پروکسی در این طرح واقعاً حل می‌شوند و کدام نه.

📅۶ مرداد ۱۴۰۵
چگونه در سال ۲۰۲۶ داده‌های Reddit را جمع‌آوری کنیم: محدودیت‌های API، فایل‌های .json خصوصی و نقش پروکسی
```html

در ماه مه 2026، Reddit دسترسی غیرمعتبر به .json -اندپوینت‌ها را مسدود کرد — همان ترفند «به هر URL .json اضافه کن» که سال‌ها ده‌ها اسکریپت، داشبورد و پروژه‌های کوچک را حفظ کرده بود. بررسی در 28 ژوئیه 2026: درخواست به https://www.reddit.com/r/webscraping/top.json?t=week با User-Agent معمولی مرورگر، 403 Forbidden را برمی‌گرداند. به طور همزمان، robots.txt Reddit تنها دو خط معنادار دارد: User-agent: * و Disallow: / — با ارجاع به سیاست محتوای عمومی.

این تغییر نمی‌دهد «چگونه دور بزنیم»، بلکه چگونه حالا اساساً پایپ‌لاین جمع‌آوری داده‌های Reddit را بسازیم. در زیر — یک طرح کاری برای سال 2026: چه چیزی واقعاً در دسترس است، چه محدودیت‌هایی وجود دارد، کجا به پروکسی نیاز است و کجا نجات‌دهنده نیستند.

چه چیزی دقیقاً خراب شد: یک زمان‌بندی کوتاه

  • ژوئن 2023 — Reddit تعرفه پرداختی 0.24 دلار برای 1000 فراخوان API برای برنامه‌های پر بار را معرفی کرد. نتیجه: بسته شدن Apollo (توسعه‌دهنده هزینه دسترسی را حدود 20 میلیون دلار در سال تخمین زده بود)، خروج اکثر مشتریان شخص ثالث و توقف Pushshift — آرشیو عمومی پست‌ها و نظرات که نیمی از تحقیقات دانشگاهی بر آن تکیه داشت.
  • مه 2026 — منسوخ شدن .json غیرمعتبر. ابزارهایی که «فقط URL را می‌کشیدند»، دیگر کار نمی‌کردند؛ ترافیک از طریق حفاظت Cloudflare با بررسی جلسه عبور کرد.
  • اکتبر 2025 — تا کنون — شکایت Reddit از Perplexity AI، Oxylabs UAB، AWMProxy و SerpApi (شهرستان جنوبی نیویورک، قاضی انگلمایر). Reddit متهمان را به استخراج صنعتی محتوای خود از طریق نتایج گوگل و فروش مجدد داده‌ها متهم می‌کند و به مقررات ضد دور زدن DMCA استناد می‌کند. اولین شکایت اصلاح شده ارائه شده است؛ تا مارس 2026، پرونده در مرحله درخواست برای رد است. متهمان نقض‌ها را انکار می‌کنند: Perplexity این را تلاشی برای مسدود کردن داده‌های عمومی می‌نامد، SerpApi و Oxylabs به دسترسی به وب عمومی در چارچوب قانون اشاره می‌کنند.

نتیجه عملی از بند سوم: جمع‌آوری داده‌های Reddit به دور از API رسمی — یک منطقه ریسک حقوقی است و قیمت اشتباه برای یک پروژه تجاری نه به صورت مسدود شدن، بلکه به صورت شکایت اندازه‌گیری می‌شود. در مورد اینکه چگونه دادگاه‌ها در سال 2026 استخراج داده‌ها از نتایج را تفسیر می‌کنند، ما در مطلبی درباره تصمیم در مورد پرونده Google و SerpApi بررسی کردیم.

API داده‌های رسمی: محدودیت‌های واقعی 2026

این تنها راهی است که ادعای حقوقی ایجاد نمی‌کند. ارقام که باید قبل از طراحی بدانید:

  • 100 درخواست در دقیقه برای کلاینت OAuth. پنجره به طور میانگین حدود 10 دقیقه است، بنابراین نوسانات کوتاه مجاز است.
  • 10 درخواست در دقیقه بدون OAuth — این برای هیچ چیزی به جز اشکال‌زدایی کافی نیست.
  • محدودیت بر اساس کلید برنامه است، نه بر اساس کاربر نهایی. پنج جریان در یک توکن ظرفیت پنج‌برابری نمی‌دهد — آنها فقط یک بودجه را پنج برابر سریع‌تر مصرف می‌کنند.
  • تعرفه رایگان پروژه‌های شخصی، ربات‌ها، ابزارهای مدیریت و تحقیقات دانشگاهی را پوشش می‌دهد. هیچ شمارش مالی وجود ندارد، فقط سقف بر اساس فراوانی.
  • استفاده تجاری نیاز به قرارداد و تأیید دستی دارد؛ تعرفه — 0.24 دلار برای 1000 فراخوان. به گفته سایت‌های صنعتی، آستانه ورود به قرارداد تجاری حدود 12,000 دلار در سال آغاز می‌شود.
  • آموزش مدل‌های ML بر روی داده‌های API به طور مستقیم توسط شرایط API داده‌ها ممنوع است. مجوزهای آموزشی — قراردادهای خصوصی جداگانه (معامله Reddit با Google در مطبوعات حدود 60 میلیون دلار در سال تخمین زده شده است).

عنوان‌هایی که همیشه باید تجزیه شوند

Reddit برای هر پاسخ سه عنوان می‌دهد: X-Ratelimit-Used، X-Ratelimit-Remaining و X-Ratelimit-Reset. این تنها منبع معتبر حقیقت درباره بودجه شما است — نه یک ثابت در کد و نه یک ویکی قدیمی با عدد «60 درخواست در دقیقه» (این از سال 2023 منسوخ شده است).

نیازمندی‌ها به User-Agent

Reddit انتظار دارد یک رشته توصیفی منحصر به فرد به فرمت platform:app_id:version (by /u/username) ارائه شود. User-Agent های عمومی و خالی به شدت بر اساس فراوانی کاهش می‌یابند — این اولین چیزی است که باید بررسی کنید اگر محدودیت‌ها زودتر از حد انتظار تمام می‌شوند.

گام به گام: چگونه یک پایپ‌لاین بسازیم که سقوط نکند

  1. یک برنامه اسکریپت را در تنظیمات Reddit ثبت کنید و 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 یک شمارنده مستقل دارد؛ چندین برنامه در حساب‌های مختلف با توزیع round-robin (در Python — itertools.cycle) ظرفیت را به صورت خطی افزایش می‌دهند. مهم است: برای بار تجاری، این جایگزینی برای قرارداد با Reddit نیست — این یک روش برای قرار گرفتن در محدودیت‌های عادلانه است، نه دور زدن آنها.
  7. دور زدن محدودیت لیستینگ را در نظر بگیرید. Reddit حداکثر حدود 1000 عنصر در هر لیستینگ (100 در هر صفحه، کرسر after) ارائه می‌دهد. محتوای قدیمی‌تر از طریق اندپوینت‌های استاندارد در دسترس نیست. راه‌حل استاندارد — نه «شکستن» محدودیت، بلکه برش نمونه‌برداری بر اساس زمان و انجام چندین درخواست باریک به جای یک درخواست وسیع است.
  8. برای داده‌های تاریخی به دنبال ایندکس باشید، نه API. پس از بسته شدن Pushshift، نیش آن توسط ایندکس‌های خارجی مانند PullPush (رایگان، اما بدون SLA) و API‌های جستجوی تجاری با ایندکس خود و دیگر سقف‌ها اشغال شده است. برای کارهای دانشگاهی، Reddit برنامه جداگانه‌ای به نام Reddit for Researchers دارد.

دام‌های پنهانی که دیر متوجه می‌شوند

PRAW جریان را آرام می‌کند، اما از همه چیز محافظت نمی‌کند. محدودکننده داخلی PRAW سرآیندها را می‌خواند و خود به خود وقفه‌ها را قرار می‌دهد — این برای یک اسکریپت تک‌جریانی به خوبی کار می‌کند. وضعیت فعلی از طریق reddit.auth.limits قابل مشاهده است. این در دو مورد خراب می‌شود: در چندجریانی با اعتبارنامه‌های مشترک (نمونه‌ها مصرف یکدیگر را نمی‌بینند) و در کد async، جایی که time.sleep مسدود کننده حلقه رویداد است.

عاملان AI به طور نامحسوس سهمیه را مصرف می‌کنند. یک مرحله استدلال یک عامل به راحتی می‌تواند به 10–15 فراخوان ابزار تبدیل شود. ده جلسه موازی — 100–150 درخواست همزمان، یعنی کل بودجه دقیقه در عرض چند ثانیه. اگر شما یک عامل بر روی Reddit می‌سازید، محدودکننده باید در سطح استخر باشد، نه یک فراخوان جداگانه.

پرسش بدون بک‌اف. بررسی به‌روزرسانی‌ها «هر N ثانیه» بدون وقفه نمایی — دومین علت شایع 429 بعد از توکن عمومی است.

کجا واقعاً به پروکسی نیاز است و کجا نیست

بیایید صادق باشیم: پروکسی‌ها محدودیت شما را در API رسمی افزایش نمی‌دهند. سهمیه به کلید برنامه متصل است، نه به IP خروجی، و تلاش برای «تکثیر» آن از طریق تغییر آدرس کار نمی‌کند و با شرایط مغایرت دارد. وظایفی که پروکسی‌ها واقعاً در پایپ‌لاین Reddit حل می‌کنند، متفاوت است:

  • دسترسی جغرافیایی و ارتباط. Reddit در برخی کشورها غیرقابل دسترسی یا به طور جزئی محدود است، و شبکه‌های شرکتی آن را به عنوان یک شبکه اجتماعی مسدود می‌کنند. یک گره خروجی پایدار در منطقه مورد نظر، یک مسئله دسترسی به زیرساخت است، نه دور زدن محدودیت‌ها. برای وظایف سروری با IP ثابت معمولاً پروکسی‌های دیتاسنتر کافی است.
  • نتایج منطقه‌ای. بخشی از محتوا و توصیه‌های Reddit با توجه به جغرافیای درخواست ارائه می‌شود؛ اگر شما تحلیل می‌کنید که مخاطب یک کشور خاص چه چیزی می‌بیند، به خروجی از آن کشور نیاز دارید.
  • توزیع زیرساخت. وقتی چندین سرویس مستقل (جمع‌آوری، نظارت بر ذکرها، تحلیل) بر روی یک سرور زندگی می‌کنند، یک IP تنها به نقطه شکست مشترک برای تمام ادغام‌ها تبدیل می‌شود.
  • کار با حساب‌های شخصی. برای مدیریت، اداره جوامع و فعالیت‌های قانونی SMM از چندین پروفایل، پیوند «حساب ↔ IP ثابت» — بهداشت پایه‌ای است. در اینجا پروکسی‌های مسکونی با جلسه چسبنده مناسب است.

اما پروکسی‌ها چه کار نمی‌کنند: دسترسی تجاری را دور از قرارداد قانونی قانونی نمی‌کنند، محدودیت لیستینگ 1000 عنصر را حذف نمی‌کنند و Disallow: / را در robots.txt لغو نمی‌کنند. رویکرد کلی برای کار با محدودیت‌های پلتفرم‌ها — در بررسی محدودیت نرخ در API و نقش پروکسی.

نتیجه‌گیری

Reddit در سال 2026 به طور کامل دیگر «مجموعه داده‌های باز که می‌توان با .json گرفت» نیست. طرح کاری به این صورت است: دسترسی OAuth رسمی + محدودکننده عادلانه بر اساس سرآیندها + چرخش توکن‌ها در چارچوب قوانین + ایندکس خارجی برای تاریخچه. پروکسی‌ها در این طرح مسئول دسترسی و جغرافیا هستند، نه دور زدن سهمیه‌ها — و این تنها نقشی است که در آن نتیجه قابل پیش‌بینی ارائه می‌دهند.

اگر پروژه شما تجاری است، بودجه قرارداد با Reddit را از قبل برنامه‌ریزی کنید: تاریخچه قضایی با Perplexity، Oxylabs و SerpApi نشان می‌دهد که پلتفرم آماده است برای حفاظت از داده‌های خود هزینه‌ای بسیار بیشتر از دسترسی قانونی صرف کند.

```