Скрипты для загрузки и обновления данных ФИАС в формате ГАР
Если вы решитесь использовать эти скрипты, то имейте в виду, что автор - НЕ программист. Скрипты написаны методом велосипеда и костыля. Они подходят для меня и работают так, как нужно мне на моей рабочей системе. Используйте их на свой страх и риск. Если вы найдёте их полезными, я буду рад. Если знаете, как улучшить, или обнаружите косяки, не стесняйтесь написать мне или даже сделать Pull Request.
- Скрипт создавался и тестировался на Ubuntu и Windows.
- Python 3.^8
- Pip
sudo apt install python3-pip
- Psycopg2
pip3 install psycopg2
- lxml
pip3 install lxml
- PostgreSQL ^10, в котором уже должна быть создана целевая БД
- progress
pip3 install progress
1. Загрузить с сайта ФНС:
- архив с актуальной версией ГАР (прямая ссылка).
- XSD схемы выгрузки БД (прямая ссылка).
XSD схемы и XML файлы должны быть распакованы в разные директории. Для удобства таблицы в архиве разбиты на директории по субъектам РФ. Скрипт импортирует в БД таблицы, относящиеся только к одному субъекту, поэтому в директорию для XML файлов должны быть извлечены:
- папка, соответствующая номеру импортируемого субъекта РФ
- все файлы, находящиеся в архиве без директорий, "сверху"
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 службы получения обновлений
в котором прописать дату скачанного архива в формате dd.mm.yyyy
crontab -e
mm hh * * * /path/to/python/interpreter /path/to/updateGAR.py
Скрипт по очереди сравнивает дату в файле currentVersion.txt
с датами доступных
обновлений на сайте ФНС и, если появились обновления, скачивает и импортирует их по одному.
Перед скачиванием скрипт проверяет, не превышает ли размер обновления 1 ГБ. Если такое
случается, скачивание не происходит, вместо этого в лог попадает предупреждение. Такое
поведение было реализовано, поскольку имел место случай, когда по ссылке на обновление
была доступна полная 27 гигабайтовая версия БД.
Так или иначе у пользователя есть возможность скачать обновление вручную и самостоятельно
запустить скрипт обновления.