Визначте обмежене завдання та його результат
Вважайте кожен запуск за розкладом історичним отриманням, а не живим потоком. Reddit Data Stream незалежний від Reddit, без офіційного зв’язку, SSE, підписок WebSocket чи стрічки змін. Розклад належить вашому застосунку. Він не встановлює частоти оновлення архіву, доставки нових дописів або повідомлень про виправлення та видалення. Підсумковий локальний файл містить записи, які фактично вдалося отримати в цьому запуску.
Почніть із https://api.redditdatastream.com/v1/posts?subreddit=apacheairflow&limit=3&page=3 — прикладу на головній. Він запитує не більше трьох дописів на третій сторінці цієї вибірки. Використовуйте X-API-Key: <ключ> або Authorization: Bearer <ключ> на сервері. Сторінка ключа пояснює реєстрацію та одноразовий показ до оплати. Чинний ключ не має потрапляти до журналу завдання чи підсумкового файла з даними.
Задайте явні фільтри та максимум окремих викликів сторінок для свого завдання. search, posts і comments приймають limit і page від 1 до 100. Для вікон дат from і to використовують YYYY-MM-DD UTC за created_utc, включаючи останній день повністю, а не час потрапляння до архіву. Менші вікна й локальне сортування не доводять повноти. min_score фільтрує числовий поріг без сортування та оцінки якості.
Перевірте, серіалізуйте й опублікуйте локально
Перевірте HTTP-результат до обробки тіла як даних. Переконайтеся, що data — масив, і перевірте поля, зберігаючи пропуски замість вигаданих значень. Записи плоскі; наявні parent_id та link_id допускають локальне групування без гарантії повної розмови. Ці посилання не є фільтрами пошуку. API повертає JSON, а призначення JSONL створює ваш код; перемикання формату серверного експорту не мається на увазі.
Серіалізуйте кожен отриманий запис стандартним серіалізатором, наприклад json.dumps(record, ensure_ascii=False) у Python, і додайте одне переведення рядка після значення. Серіалізатор екранує переноси всередині тексту, залишаючи один запис на одному фізичному рядку. За потреби зберігайте вихідну відповідь окремо для діагностики pagination і credits. Успішний порожній масив data створює нуль рядків записів; не додавайте вигаданого допису замість відсутнього результату.
Можна спочатку писати до тимчасового локального файла, перевірити завершення й лише потім передати результат наступному завданню. Позначайте локальний прогрес після успішного передбаченого запису. Це етапи вашої реалізації, а не єдина транзакція API, що охоплює отримання та диск. Відмова диска після успішної відповіді залишається локальною помилкою; віддалений кредит уже може бути списаний. Назва файла чи заміна файла самі собою не доводять одноразової доставки.
Читайте pagination.total з relation: eq — точний підсумок запиту, gte — нижня межа, unknown — ненадійний підсумок, можливо null. Порожня сторінка після першої може повернути unknown замість нуля. Зберігайте has_more та window_exhausted для опису підтримуваних меж і зупиняйтеся на сторінці 100. Точний підсумок або готовий локальний файл не доводять отримання всіх історичних збігів. Поділ періодів також не підтверджує повного охоплення.
Повторюйте за результатом і зберігайте невизначеність
Внутрішній порядок _doc не є часом, релевантністю, оцінкою чи порядком потрапляння до архіву. Остання часова позначка не доводить, що раніші записи отримані повністю. Локальна контрольна точка описує спробу чи завершену роботу вашої системи, не стабільний серверний курсор. Нове отримання тієї самої сторінки може відрізнятися, повторити записи чи не повернути раніше отриманого матеріалу без гарантії ідентичності.
Обробка вже збереженої відповіді не викликає архів. Нове віддалене звернення коштує один кредит у разі успіху, навіть порожнього. Некоректні запити не списуються; збій джерела повертає резерв. Утрата відповіді клієнтом може статися після оплаченого успіху: позначайте таку спробу як невизначену. Локальне відхилення запису під час перевірки чи збереження не повертає вартості завершеного віддаленого запиту. Усунення повторів на вашому боці також не скасовує попереднього списання.
За 400 виправте параметри, за 401 перевірте ключ і домен, за 402 — баланс, за 429 обмежте й відкладіть повтори. Публічний /v1/status підтверджує лише відповідь HTTP-застосунку та статичний опис сервісу, не доступність пошуку чи списання за втрачену відповідь. Документація пояснює обмеження маршрутів. Ціна — $1 за 1000 успішних запитів, мінімум $50 та умовні 100 пробних кредитів, без підписок.
Для перевипуску ключа увійдіть до панелі на сторінці ключа й підтвердьте пароль: попередній ключ негайно вимикається. Оновіть завдання, які його використовують. Для оплати спочатку увійдіть і створіть рахунок, потім перекажіть його точну суму із зазначеними токеном та мережею й надішліть хеш транзакції на перевірку. Стан оплати та локальні контрольні точки конвеєра відрізняються; ні те ні інше не гарантує майбутньої доступності архіву.