Локальное решение еще ничего не значит

Оказалось, что написать парсер для соцсети было проще, чем заставить его второй день подряд получать свежие посты автоматически

Недавно я работал над задачей по сбору данных из социальной сети.

Нужно было регулярно авторизовываться, собирать посты по заданной теме, вытаскивать из них текст, заголовки, хештеги, комментарии, ссылки, изображения и все это складывать в систему, которая потом должна была стать базой знаний для ИИ-агента.

В этой задаче был важный нюанс: Если пост появился, реагировать на него нужно почти сразу, так как данные быстро устаревают.

То есть скрипт должен был не просто “уметь собирать данные”, а делать это регулярно, в большом объеме и почти в реальном времени, чтобы потом пользователь получал уведомление: где появился нужный пост и куда стоит подключиться.

На старте все выглядело очень хорошо.

Я собрал нужные элементы, настроил логику извлечения, получил на выходе именно те данные, которые были нужны. Посты собирались, комментарии тоже, структура меня устраивала.

«Супер, основная работа завершена» - подумал я…

После этого начал строить вокруг парсера полноценную систему: 1. архитектуру хранения, 2. загрузку данных, 3. обработку большого набора полей, 4. уведомления, 5. контроль качества, 6. службы запуска по расписанию, 7. управление очередью задач.

То есть уже не просто скрипт, а полноценный контур решения.

А когда перенес все на сервер, выяснилось, что до готовности там еще очень далеко.

Самое неприятное было даже не в том, что что-то падало с ошибкой, а в том, что сайт в какой-то момент просто переставал отдавать новые данные.

Технически все выглядело нормально: 1. скрипт запускался, 2. страницы открывались, 3. явной ошибки не было.

Но базе не появлялись новые данные, почему-то.

Сначала я начал искать ошибку в своей логике обработки и загрузки.

Это и был самый неприятный момент во всей истории:

система не ломалась явно — она просто незаметно переставала быть полезной.

Позже стало понятно, что дело в антибот-защите и в том, что даже пользовательская сессия не гарантирует стабильную автоматическую работу. Локально все выглядело нормально, потому что среда была “человеческой”: графический интерфейс, живой браузерный профиль, привычное поведение

А на сервере этот сценарий уже не воспроизводился так же стабильно —вместо новых постов сайт показывал старую страницу. Сессия устаревала, профиль не обновлялся автоматически, и новые данные переставали приходить.

В этот момент я особенно ясно увидел свою корневую ошибку.

Я уже успел построить большую систему вокруг того, что еще не было доказано как устойчивый процесс.

То есть хранилище, загрузка, очереди, уведомления и архитектура в целом появились раньше, чем ответ на главный вопрос:

можно ли вообще стабильно получать свежие данные из этого источника?

В итоге временное решение оказалось довольно приземленным: я выделил отдельный старый ПК, который полностью повторял мою среду разработки, и стал использовать его как постоянную машину для запуска процесса.

Это неудобно, это не финальная архитектура и точно не тот вариант, который хочется показывать как решение задачи.

Однако как временное решение позволяет продолжить сбор данных, пока у меня нет времени на следующую итерацию доработки.

Вывод из этой истории получился очень полезный.

Теперь мой принцип такой:

сначала авторизация и воспроизводимый доступ к источнику, потом хранение, очереди, уведомления и все остальное.

Если источник нельзя стабильно читать несколько дней подряд в автоматическом режиме, то все остальное пока не имеет значения.

Ни красивая архитектура, ни продуманная схема данных, ни будущая масштабируемость не спасут проект, если свежие данные просто перестают поступать.

Только после доказательства, что канал доступа вообще живой, устойчивый и мой метод обращения к нему - воспроизводим в любой среде, имеет смысл строить все остальное.

Локальное решение еще ничего не значит | Сетка — социальная сеть от hh.ru