/fias

Скрипт для загрузки и обновления данных ФИАС в формате ГАР

Primary LanguagePython

GAR to PostgreSQL

Скрипты для загрузки и обновления данных ФИАС в формате ГАР

Если вы решитесь использовать эти скрипты, то имейте в виду, что автор - НЕ программист. Скрипты написаны методом велосипеда и костыля. Они подходят для меня и работают так, как нужно мне на моей рабочей системе. Используйте их на свой страх и риск. Если вы найдёте их полезными, я буду рад. Если знаете, как улучшить, или обнаружите косяки, не стесняйтесь написать мне или даже сделать Pull Request.


Системные требования

  1. Скрипт создавался и тестировался на Ubuntu и Windows.
  2. Python 3.^8
  3. Pip sudo apt install python3-pip
  4. Psycopg2 pip3 install psycopg2
  5. lxml pip3 install lxml
  6. PostgreSQL ^10, в котором уже должна быть создана целевая БД
  7. progress pip3 install progress

Порядок действий при первичном импорте ГАР.

1. Загрузить с сайта ФНС:

  1. архив с актуальной версией ГАР (прямая ссылка).
  2. XSD схемы выгрузки БД (прямая ссылка).

2. Разархивировать скачанные архивы

XSD схемы и XML файлы должны быть распакованы в разные директории. Для удобства таблицы в архиве разбиты на директории по субъектам РФ. Скрипт импортирует в БД таблицы, относящиеся только к одному субъекту, поэтому в директорию для XML файлов должны быть извлечены:

  1. папка, соответствующая номеру импортируемого субъекта РФ
  2. все файлы, находящиеся в архиве без директорий, "сверху"

3. Создать в директории со скриптом файл config.py и присвоить следующим переменным в нем необходимые значения (все значения - строки)

  • DB_HOST - адрес БД
  • DB_PORT - порт
  • DB_USER - имя пользователя БД
  • DB_PASSWORD - пароль
  • DB_NAME - название БД
  • DB_SCHEMA - название схемы БД
  • XSD_DIRECTORY - папка с XSD схемами
  • XML_DIRECTORY - папка с XML таблицами
  • UPDATE_DIRECTORY - папка, куда скрипт будет скачивать обновления
  • REGION_CODE - код региона
  • UPDATE_SERVICE_URL = http://fias.nalog.ru/WebServices/Public/GetAllDownloadFileInfo - URL службы получения обновлений

4. Запустить index.py и ждать


Для автоматического обновления БД:

1. Клонировать данный репозиторий на сервер с БД (или иной)

2. Установить необходимые зависимости

3. Присвоить переменным в файле config.py необходимые значения

4. В папке UPDATE_DIRECTORY предварительно создать файл currentVersion.txt,

в котором прописать дату скачанного архива в формате dd.mm.yyyy

5. Прописать в cron ежедневное выполнение скрипта updateGAR.py

crontab -e

mm hh * * * /path/to/python/interpreter /path/to/updateGAR.py

Скрипт по очереди сравнивает дату в файле currentVersion.txt с датами доступных обновлений на сайте ФНС и, если появились обновления, скачивает и импортирует их по одному. Перед скачиванием скрипт проверяет, не превышает ли размер обновления 1 ГБ. Если такое случается, скачивание не происходит, вместо этого в лог попадает предупреждение. Такое поведение было реализовано, поскольку имел место случай, когда по ссылке на обновление была доступна полная 27 гигабайтовая версия БД. Так или иначе у пользователя есть возможность скачать обновление вручную и самостоятельно запустить скрипт обновления.