Reddit API Stack

Интеграция исторического архива Reddit: практическое руководство для Python и JavaScript

Получить API-ключ

Введение и базовая настройка

Исторический архив Reddit представляет собой независимую базу данных, которая не является официальным продуктом компании Reddit и не отражает данные в режиме реального времени. Этот сервис позволяет разработчикам получать доступ к сохраненным публикациям и комментариям, формируя основу для анализа контента и исторических исследований. В отличие от стандартных API Reddit, здесь отсутствует поддержка таких функций, как OAuth, голосование, прямые сообщения или публикация новых материалов, что делает этот инструмент узкоспециализированным для чтения данных.

Начните с получения API-ключа при регистрации. Он показывается один раз сразу после создания учетной записи, до оплаты; исходный ключ не сохраняется постоянно в браузере. Храните его отдельно от исходного кода приложения. Если учетная запись соответствует общим для сети ограничениям против злоупотреблений, ей может быть предоставлен пробный баланс в 100 кредитов для проверки интеграции.

Для регистрации используются электронная почта и пароль длиной от 12 до 72 байтов. Подтверждение адреса письмом, вход через сторонний сервис и подключение кошелька не являются шагами этого процесса. При замене API-ключа нужно войти в учетную запись и подтвердить пароль: прежний ключ перестанет действовать сразу. После этого обновите конфигурацию серверного приложения, иначе следующие запросы будут отклоняться.

Использование основных эндпоинтов

В Python настройте HTTP-клиент на передачу ключа через заголовок X-API-Key, а параметры поиска храните отдельно от настройки аутентификации. Параметры q, author и subreddit помогают выразить вопрос к архиву; даты from и to задаются как YYYY-MM-DD в UTC. min_score отсекает записи с меньшим числовым рейтингом, но не меняет порядок результатов. Сохраняйте параметры рядом с локальной выборкой для последующего анализа.

В серверном приложении на JavaScript используйте fetch для GET-запросов с тем же заголовком X-API-Key. Выбирайте /v1/posts для публикаций и /v1/comments для комментариев; id не является фильтром этих маршрутов. Когда известен идентификатор нужной записи, используйте /v1/item с id. Ответы плоские: группировка по parent_id или link_id возможна только при наличии этих полей и не восстанавливает гарантированно всю цепочку обсуждения.

До запуска цикла обхода задайте предел числа запросов. Один запрос получает одну страницу; limit ограничивает число записей от 1 до 100, а page выбирает страницу от 1 до 100. Внутренний порядок _doc не соответствует дате, релевантности или рейтингу. Даже перебор всех разрешенных страниц не гарантирует получение каждого совпадения, поэтому описывайте итог как ограниченную выборку, а не полный экспорт.

Обработка ошибок и тарификация

При расчете бюджета учитывайте успешные запросы, а не отдельные записи. Один запрос стоит один кредит, включая пустой результат; $1 дает 1000 кредитов. Минимальное платное пополнение $50 добавляет 50000 кредитов, которые не имеют срока действия. Отсутствие подписки не гарантирует вечной доступности архивных материалов. Оно означает, что для использования приобретенного баланса не требуется ежемесячное продление.

Разделяйте обработку HTTP-кодов: 400 означает некорректный запрос, 401 — отсутствующий или недействительный ключ, 402 — недостаток кредитов, 429 — ограничение частоты. Не повторяйте ошибочный запрос без изменения параметров. Некорректные запросы не списывают кредиты, а сбой вышестоящего сервиса возвращает зарезервированный кредит. Отдельно обрабатывайте успешный ответ без записей: это не ошибка аутентификации и не основание для возврата кредита.

Маршрут /v1/status сообщает статическое описание исторического сервиса и показывает, что HTTP-сервер отвечает. Такой ответ не проверяет поиск, доступность записей или полноту архива. Аналогично различайте итоговые счетчики: eq означает точное число совпадений, gte — нижнюю границу, unknown — отсутствие надежного итога, который может быть null. Точное число совпадений само по себе не доказывает, что клиент получил все записи.