Reddit API Stack

Інтеграція API архіву Reddit для розробників на Python та JavaScript

Отримати API-ключ

Базові підключення та кінцеві точки

Це незалежний історичний архів Reddit, а не офіційний сервіс або джерело даних у реальному часі. Використовуйте GET-запити до /v1/search для пошуку, /v1/posts для дописів, /v1/comments для коментарів та /v1/item для відомого окремого запису. Маршрут /v1/subreddits повертає відомості про спільноти з необов’язковим фільтром prefix, а не оформлює підписку на них. /v1/status повертає статичний опис сервісу та відповідь HTTP-сервера.

Для автентифікованих запитів передавайте виданий ключ у заголовку X-API-Key. Ключ і баланс належать обліковому запису на цьому домені та не є спільними для інших сайтів мережі. Після реєстрації ключ показується один раз. Щоб замінити його, увійдіть у панель на сторінці отримання ключа та підтвердьте пароль. Новий ключ одразу робить попередній недійсним, тому потрібно оновити конфігурацію клієнта.

Пошук підтримує q, назву спільноти subreddit, автора author і тип kind зі значенням post або comment. Параметри from та to приймають дати YYYY-MM-DD в UTC; указаний день to входить у діапазон. min_score задає мінімальну числову оцінку. limit і page мають діапазон від 1 до 100. Параметр id потрібен лише для /v1/item і не є фільтром маршрутів дописів та коментарів.

Обробка даних та обмеження результатів

API повертає плоскі записи, а не зібрані сервером дерева обговорень, що означає, що структура даних не містить вбудованого контексту батьківських або дочірніх елементів у вкладеному вигляді. Якщо повернені записи містять поля parent_id та link_id, клієнт може локально згрупувати їх для формування логічної структури, але це не гарантує повної відсутності розривів у ланцюжку. Фільтри link_id або parent_id не підтримуються на стороні сервера, тому для фільтрації за зв'язками потрібно використовувати локальні алгоритми на стороні клієнта, що може збільшити час обробки даних.

min_score лише відсіює записи нижче заданої оцінки й не керує сортуванням. Внутрішній порядок _doc не відповідає хронології, релевантності або рейтингу. Один запит повертає одну сторінку з максимум 100 записами. Для переходу до іншої сторінки потрібен окремий запит із відповідним page. Обхід усіх дозволених сторінок не означає отримання кожного збігу або повного архіву, тому враховуйте межі такої вибірки.

Успішний запит на отримання даних коштує один кредит, включно з порожньою відповіддю. Некоректні запити не списують кредитів, а збій зовнішнього сервісу повертає зарезервований кредит. Підсумкова кількість збігів може бути точною, нижньою межею або невідомою. eq означає точний підсумок, gte — нижню межу, unknown — відсутність надійного підсумку, який може бути null. Не плутайте ці значення з кількістю отриманих сторінок.

Помилки, платежі та безпека

HTTP 400 означає некоректний запит, 401 — відсутній або недійсний API-ключ, 402 — недостатню кількість кредитів, 429 — обмеження частоти запитів. У Python та JavaScript перевіряйте статус перед розбором даних. Виправлення параметрів, заміна ключа, поповнення балансу й очікування після обмеження потребують різної обробки. Не повторюйте запит без змін, якщо його відхилено через неправильні параметри або непридатний ключ.

Для поповнення після входу створіть рахунок у панелі облікового запису. Підтримуються USDT TRC20 та USDC ERC20 в основній мережі Ethereum. Поточний рахунок указує адресу одержувача й точну суму; окремий рахунок не означає унікальної адреси гаманця. Після переказу введіть хеш самої платіжної транзакції. Кредити зараховуються після перевірки підтвердженого справжнього переказу, без обіцяного строку завершення перевірки.

Пароль облікового запису має довжину від 12 до 72 байтів. На сервері зберігаються хеші пароля та API-ключа, а IP-інформація використовується для запобігання зловживанням. Саме обмеження довжини не є гарантією складності пароля. Зберігайте ключ поза кодом, який надсилається браузеру відвідувача. Відповідь /v1/status засвідчує лише відгук HTTP-сервера, а не справність пошуку чи доступність конкретних історичних матеріалів.

Маршрути API

МетодМаршрутПараметри
GET/v1/searchq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/postsq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/commentsq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/itemid
GET/v1/subredditsprefix
GET/v1/status—

Параметри запиту

ПараметрЗначення / тип / діапазон
qtext
subredditkeyword
authorkeyword
kindpost | comment
fromISO date
toISO date
min_scoreinteger
limit1–100
page1–100
iditem ID
prefixsubreddit prefix
curl -H "Authorization: Bearer YOUR_API_KEY" 'https://api.redditapistack.com/v1/search?q=research&limit=10'

import json, urllib.request
request = urllib.request.Request('https://api.redditapistack.com/v1/search?q=research&limit=10', headers={"Authorization": "Bearer YOUR_API_KEY"})
with urllib.request.urlopen(request) as response:
    print(json.load(response))

fetch("https://api.redditapistack.com/v1/search?q=research&limit=10", {headers: {Authorization: "Bearer YOUR_API_KEY"}})
  .then(response => response.json()).then(console.log);