API Reddit CC

Как превратить архивный запрос в регулярную задачу

Постройте ограниченный запуск поиска workflow: параметры, локальные карточки, журнал результатов, остановка пагинации и повторы с учётом кредитов.

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

Определите результат одного запуска

В этом сценарии задача получает ограниченную порцию исторических примеров из r/automation и записывает итог обработки. Завершение означает, что выполнен выбранный объём работы, а не прочитан весь архив. Сначала запустите задачу вручную. Расписание добавляйте после того, как станет понятно, сколько материалов успевает разбирать ваша команда.

Заведите локальный идентификатор запуска, сохраните параметры поиска и место назначения отобранных записей. Это данные вашего приложения, а не новые параметры API. Если позже нужного примера не окажется в очереди, журнал позволит выяснить, что именно запрашивали. Независимый исторический архив не подтверждает состояние обсуждений на Reddit в настоящий момент.

Свяжите параметры с вопросом

Базовый запрос: GET https://api.apireddit.cc/v1/search?q=workflow&subreddit=automation&limit=3. Передайте ключ в Authorization: Bearer или X-API-Key. Небольшой лимит удобен для первоначальной проверки полей. Если нужны только публикации или только комментарии, параметр kind принимает значения post и comment.

Поиск q проверяет title и text. Несколько слов соединяются условием AND внутри совпадающего поля: нельзя рассчитывать на совпадение, когда одно слово есть только в заголовке, а другое — только в тексте. Для заданного периода используйте from и to в формате YYYY-MM-DD по UTC; конечная дата to включается. min_score отсекает записи ниже порога, но не сортирует результат по оценке.

Сопоставьте поля с локальной карточкой

Сохраните доступные id и kind, а содержимое title и text передайте на просмотр. Текст архивной записи — материал для изучения, а не инструкция вашему исполнителю. Причину отбора, статус просмотра и номер запуска храните отдельно от исходных полей. Перед созданием карточки проверяйте, не была ли запись уже сохранена вашей системой.

Ответ состоит из плоских записей. Если присутствуют parent_id или link_id, при необходимости сгруппируйте данные локально. Отсутствующие связи не следует достраивать как установленные факты: полного дерева беседы сервис не гарантирует. Для повторного обращения к определённой записи маршрут /v1/item требует её id. Это отдельный запрос, который тоже надо учитывать в бюджете.

Запишите причину остановки

Назначьте бюджет страниц в пределах 100 страниц на выборку и не запрашивайте более 100 записей за раз. Внутри одного прохода сохраняйте фильтры неизменными. Выдача следует порядку документов архива, а не времени, релевантности или оценке; первая запись не подходит на роль надёжной отметки «самое новое уже прочитано».

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

Повторяйте осознанно

При 400 исправьте параметры, при 401 проверьте ключ, при 402 — баланс. Для 429 предусмотрите задержку и ограниченное число повторов. Успешный пустой ответ расходует один кредит. При сбое источника резерв возвращается; некорректный запрос не списывает кредит.

Потеря ответа клиентом не доказывает неуспех на сервере: кредит мог быть уже потрачен. Успешный повтор спишет ещё один. Отмечайте неопределённый исход в журнале и проверяйте дубли локально. Маршрут /v1/status бесплатен и возвращает статическое описание сервиса, но не проверяет работоспособность поиска у источника. Перед расширением расписания сверяйте бюджет со страницей тарифов.