Reddit Extract

Какие поля действительно подходят вашей таблице?

Разберите небольшой ответ PostgreSQL в Reddit Extract: отделите заголовок от текста, сохраните пропуски и задайте правила для собственной таблицы.

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

Пример запроса

cURL

curl --fail-with-body -H "Authorization: Bearer YOUR_API_KEY" "https://api.redditextract.com/v1/search?q=index&subreddit=PostgreSQL&limit=3"

Искусственный пример фрагмента ответа

Только для демонстрации — это не реальные записи архива.

{
  "data": [
    {
      "kind": "post",
      "subreddit": "PostgreSQL",
      "title": "Demo: checking an index",
      "text": "Fictional example for mapping available fields."
    }
  ]
}

Показано только поле data. Состав полей может различаться; это не полный ответ.

Запрос PostgreSQL как проверка будущей строки

В задаче извлечения данных PostgreSQL может встретиться полезный заголовок без текста, которого ждёт ваша таблица. Такой случай лучше разобрать до большого запуска. Небольшой поиск index в Reddit Extract помогает определить правила для будущих строк: что переносить, что оставить пустым и что отложить на проверку.

Reddit Extract предлагает независимый доступ к историческим записям Reddit, который не является живым потоком данных от самой социальной сети. Сервис не связан с Reddit официально. Для разработчика преобразований это источник наблюдаемых записей, а не гарантия единой неизменной схемы. Начните с небольшого ответа и проверьте, какие свойства действительно присутствуют, прежде чем связывать с ними обязательные столбцы в своём приложении.

Пример этого сайта — https://api.redditextract.com/v1/search?q=index&subreddit=PostgreSQL&limit=3. Значение q=index задаёт текстовый поиск, subreddit=PostgreSQL ограничивает сообщество, а limit=3 ограничивает размер страницы тремя записями. Это не обещание трёх результатов и не случайная выборка всех обсуждений индексов. Выполняйте запрос со своего сервера, передавая ключ redditextract.com через X-API-Key или Authorization: Bearer.

Заголовок и текст решают разные задачи

При осмотре ответа держите доступный title отдельно от text. Если приложению нужен один столбец содержимого, решение об их объединении принимайте явно и сохраняйте название исходного поля. Совпадение index в заголовке не доказывает, что это слово встретилось в основном тексте. Подстановка заголовка вместо отсутствующего текста допустима как ваша локальная политика, но результат нельзя выдавать за исходный текст записи.

Пропуск требует решения, а не догадки

Проверяйте отдельно отсутствие свойства, явный null, пустую строку и значение неожиданного типа. Если нет рейтинга, подстановка нуля превращает неизвестное значение в наблюдение. Если нет текста, не делайте вывод, что автор ничего не написал. В своей таблице можно оставить nullable-столбец или отклонить строку с объяснением; важно сохранить исходный объект и указать, какое правило преобразования сработало.

Для идентификатора, доступного текста, автора или времени задайте отдельные правила проверки. Эти поля могут встречаться в записи, но не объявляйте каждое из них обязательным для всех постов и комментариев. Сначала устанавливайте фактический тип и только потом преобразуйте значение. Имена столбцов вашей выходной таблицы — локальная договорённость: API не принимает параметр выбора полей и не создаёт схему назначения за вас.

Ссылки можно сохранить без сборки обсуждения

Поля parent_id и link_id, когда они есть, можно сохранить как ссылки для локального объединения. Наличие ссылки не гарантирует, что её цель или все ответы попали в текущую страницу. Задача извлечения текста вообще может не требовать восстановления обсуждения. Отделяйте неразрешённую связь от ошибки чтения поля, чтобы отсутствие родительской записи не приводило к выдуманному дереву.

Порядок выдачи — архивный _doc, а не хронология, релевантность или рейтинг. min_score используется только как фильтр. На запрос приходится не более 100 записей, для одного набора условий доступны страницы от 1 до 100. Эти пределы не превращают обход страниц в полный экспорт. Точное значение, нижняя граница или неизвестный итог должны интерпретироваться согласно указанному отношению, без выводов о полноте архива.

Результат проверки — правила вашей таблицы

Сохраните полученный ответ отдельно от ключа, вместе с параметрами запроса и временем получения, которое зафиксировали сами. Такой файл становится входом для проверки вашего преобразователя. Он не является экспортом схемы, подготовленным сервисом. Если список пуст, сохраните именно пустой результат: выдуманная запись затруднит диагностику. Повторный разбор локального файла не обращается к API, а повторный успешный запрос расходует ещё один кредит.

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

Итог первого прохода — короткий набор правил: откуда берётся каждый столбец, какие значения он принимает и что делать при отказе. В руководстве эти правила проверяются на сохранённом входе. Документация нужна для параметров получения, а страница ключа — для настройки первого ограниченного запроса с вашего сервера.