Задача
В каталоге образовательного портала был заявлен тип объектов, под который движок исправно генерировал страницы — город, район, метро, регион. Только в базе не было ни одной карточки этого типа. То есть портал годами показывал поисковику раздел-пустышку: структура есть, содержимого ноль.
Ситуация типовая для программатик-порталов: список категорий заводят один раз на старте, данные подтягивают из разных источников, и какая-то категория так и остаётся без наполнения. Заметно это становится только когда специально пойдёшь считать.
Решение
Первым делом я проверил очевидные источники, а не бросился писать парсер. Результат проверки:
- в открытой картографической базе по всей стране нашёлся 21 объект такого типа, и лишь 4 из них с адресом — на каталог не хватит;
- ключ к коммерческому справочнику, лежавший в репозитории с прошлых работ, оказался мёртвым (сервис отвечал отказом) — тратить время на его восстановление смысла не было.
Рабочим источником стал открытый государственный реестр лицензий на образовательную деятельность. Он даёт то, чего нет в справочниках: юридическое название, полный адрес, ИНН и статус лицензии — данные проверяемые и официальные, а не собранные по отзывам.
Внедрение
Скрипт разбора реестра — это на 80% фильтрация мусора, а не выкачка. Поиск по ключевому слову приносит кучу ложных совпадений, и каждый класс пришлось отсекать явно:
- федерации и НКО по этому виду спорта — это не образовательные организации;
- населённые пункты, в названии которых есть тот же корень, — совпадение по топониму;
- обычные общеобразовательные школы, названные в честь чемпионов, — тип не тот.
Второй важный момент — тексты. Генератор описаний писал всем карточкам «работает по стандартам ФГОС» и «предмет в расписании наряду с основными». Для этого типа это ложь: почти все такие организации — учреждения дополнительного образования, а не общеобразовательные школы. Пришлось переопределить блоки про классы и оплату отдельно для этого типа, иначе автоматика тиражировала бы фактическую ошибку на все 51 карточку сразу.
Рейтинги и телефоны намеренно оставлены пустыми: их в реестре нет, а придумывать поля ради красоты карточки — прямой путь к недоверию. Ранее в этой базе была чистка ровно от таких выдуманных значений, и повторять ошибку я не стал.
Результат
Тип каталога, у которого было ноль карточек, получил 51 карточку с проверяемыми данными: юрлицо, адрес, ИНН, статус лицензии. Страницы этого типа перестали быть заведомо пустыми — вместе с гео-страницами это десятки посадочных, у которых наконец появилось содержимое.
Побочный, но более ценный результат: код разбора адресов вынесен в отдельный переиспользуемый модуль. Следующая категория, которую надо будет добить из того же реестра, обойдётся уже не в скрипт с нуля, а в его настройку — примерно в час работы вместо дня.