Скрипты для загрузки и обновления данных ФИАС в формате ГАР
Если вы решитесь использовать эти скрипты, то имейте в виду, что автор - НЕ программист. Скрипты написаны методом велосипеда и костыля. Они подходят для меня и работают так, как нужно мне на моей рабочей системе. Используйте их на свой страх и риск. Если вы найдёте их полезными, я буду рад. Если знаете, как улучшить, или обнаружите косяки, не стесняйтесь написать мне или даже сделать Pull Request.
- Скрипт создавался и тестировался на Ubuntu. На Windows тестов не проводилось.
- Python 3.^8
- Pip
sudo apt install python3-pip
- Psycopg2
pip3 install psycopg2
- XmlSchema
pip3 install xmlschema
- PostgreSQL ^10, в котором уже должна быть создана целевая БД
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
с датой новейшего доступного
обновления на сайте ФНС и, если появилось обновление, скачивает и импортирует его.