Краткое описание

Полная документация тут.

Архитектура

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

Общий шаблон интерфейсов: /cron|parse|api/Название сета/тип данных/действие/параметры действия

  • Кроны, собирающие информацию, которые могут быть запущены как через cli, так и через браузер. Кроны делают только одно: скачивают информацию в папку temp, базово валидируя ее. Проверка обновлений встроена в кроны, т.е. при каждом обновлении проверяется наличие старой информации в папке темп. Для того, чтобы скачивались данные без учета имеющихся (на случай того, что они могут измениться задним числом), в конфигурации сервиса (см папку bootstrap) надо поменять флаг удаления файлов на TRUE.

Кроны реализуют единый интерфейс хранения скаченных данных, где название обработанного файла (например, разархивированного) или папки (если данных за одно и то же число много) являются строкой формат datatime без ведущего нуля. При этом по умолчанию (когда указанный флаг стоит в false) исходники, из которых берется информация, также сохраняются (например, это архивы для скачивания).

Исходники хранятся в корне папки temp, а обработанные файлы из них - в подпапках с названием соответствующего крона.

Общий интерфейс кронов по url (или по параметрам cli) следующий: /cron/Название крона(/доп. параметры (если нужны). Интерфейс всех кронов одинаковый.

Если Вы это читаете, то проверить работу кронов можно непосредственно прямо сейчас. Например, запустить крон статистики Мвд, который собирает данные с сайта МВД на предмет наличия в них обновлений миграционной статистики - http://91.228.152.7/cron/Mvd или статистики Минтруда - http://91.228.152.7/cron/Mintrud.

Если крон выдаст в консоль или браузер, что новых данных нет, то кто-то это читал до Вас) В этом случае сотрите все из папки temp и повторите итерацию.

Комментарии по проблемам с данными по этим двум сетам есть в файлах кода соответствующих кронов и парсеров.

  • Парсеры, которые обрабатывают собранную информацию (если речь идет о скаченных документах или иных файлах) либо самостоятельно ее парсят, реализуют так же единый общий интерфейс и так же могут быть вызваны как через cli, так и через браузер.

Общий интерфейс парсеров: /parse/Название парсера(/метод парсинга/действие), где параметры в скобках не обязательные. При запросе без них парсер работает по сценарию по умолчанию - разбирает, валидирует и пишет в БД.

Например, нажмите http://91.228.152.7/parse/Mvd, - запустится парсер, который заполнит БД миграционной статистики МВД данными из собранных кроном документов. Если в БД что-то уже есть при запуске этого парсера по умолчанию, то, опять же, это значит, что Вы не первый(ая), кто читает этот текст. DELETE FROM mvd_regions в этом случае позволит посмотреть все в действии заново.

Парсинг статистики миграции по регионам - http://91.228.152.7/parse/Mvd/regions/insert

Парсинг статистики миграции по странам - http://91.228.152.7/parse/Mvd/countries/insert

Действия, которые поддерживаются любыми методами парсинга:

  • show - вывод результатов парсинг с применением шаблона (о нем в расширенной документации) на экран. Например, см. http://91.228.152.7/parse/Mvd/countries/show

  • json - получение результатов парсинга в виде json ФАЙЛА (т.е. парсеры также могут быть запущены через cli). См, например http://91.228.152.7/parse/Mvd/regions/json](http://91.228.152.7/parse/Mvd/regions/json)

  • insert - вставка в БД (он же метод по умолчанию, см. запросы выше - http://91.228.152.7/parse/Mvd/regions/insert) - при этом структура всех БД подразумевает, что при вставке происходит еще и проверка на наличие (update) - в БД есть поля created_at, updated_at и т д, т.е. в данном случае сохраняется время внесения изменений в БД (запуска парсера), но при этом не сохраняются имеющиеся до этого совпадающие данные - проверки по всем полям этот метод не предусматривает, для этого надо использовать, например, метод

  • update - обновление данных с учетом того, что значения в уже существующих за период парсинга данные, могут поменяться "задним числом" - в этом случае ставится флаг обновления и доступными остаются как обновленные, так и старые данные.

Набор этих действия может быть расширен в соответствующей модели БД добавлением методов с именем парсера + _название методоа. Например region_update или country_delete - интерфейс един для всех парсеров и моделей.

  • API - api также полностью инкапсулировано и реализует единый интерфейс для всех данных и всех БД. Базовый запрос (втч и через cli) выглядит так: /api/название, совпадающее с классом api, реализущего интерфейс(/метод/параметры/параметры) - это для get запросов.

Запрос к Api без метода или параметров не вызовет ошибки. По умолчанию вернется список доступных для класса методов api. См. пример http://91.228.152.7/api/Service/

Если для запрашиваемого через Апи датасета существует легенда (см. про нее полную документацию), то запрос к api сета без параметров вернет ее. См. пример - http://91.228.152.7/api/Mvd/

Запрос к api с указанием метода, но без указания параметров, вернет, соответственно, данные за последний период "разгравки" сета. Например, в рассматриваемом примере статистики МВД - это квартал. См. пример - http://91.228.152.7/api/Mvd/region/ - возвращает пустой массив, т.к. в этом квартале данных не было.

Запрос с указанием метода и параметров. Примеры (интерфейсы сквозные для всего) http://91.228.152.7/api/Mvd/region/%D0%A3%D0%BB%D1%8C%D1%8F - вернет все сведения по миграции (все сеты) по Ульяновской области за все время наблюдений.

http://91.228.152.7/api/Mvd/region/%D0%A3%D0%BB%D1%8C%D1%8F/2019 - вернет все данные по миграции по Ульяновской области за 2019 год.

http://91.228.152.7/api/Mvd/country/Герман/2018 - вернет все данные по миграции из Германии за 2018 год

http://91.228.152.7/api/Mvd/country/Герман/2018-06 - ничего не вернет, т.к. данных за этот квартал по Германии нет.

Также Api имеют сервисные инкапсулированные методы, реализованные в виде автономных микросервисов. Подробнее в полной документации, ниже только примеры.

  • Микросервисы, используемые в процессе валидации, обработки и вставки данных - полностью инкапулированы тоже и могут использоваться самостоятельно.

Некоторые примеры:

  • Расшифровка сокращений из строки в соответствии Приказом Минфина России от 5 ноября 2015 г. N 171н "Об утверждении Перечня элементов планировочной структуры, элементов улично-дорожной сети, элементов объектов адресации, типов зданий (сооружений), помещений, используемых в качестве реквизитов адреса, и Правил сокращенного наименования адресообразующих элементов".

http://91.228.152.7/api/Service/reductor/%D0%B3. - вернет расшифровку сокращения

  • Валидатор названий регионов (вернет сведения о регионах в соответствии с обновленным в 2021 классификатором ОКТМО и базой ISO + номеров и т д) - название региона может быть задано произвольно, валидирует сам. Также ищет по базе названий, связанных со списками региональных данных разных ведомств - например, вернет расшифровку фразы "Всего по регионам" или "Центральный аппарат МВД" или "Выдано консульствами"

http://91.228.152.7/api/Service/region/ - вернет полный список актуальной базы (она сама обновляется и дополняется при каждом запуске парсера, анализируя новые точки входа)

  • Валидатор стран в соответствии с кодами ОКСМ с тем же самым функционалом

http://91.228.152.7/api/Service/country/

Подробнее в полной документации.