py-phias

Python application that can operate with FIAS (Russian Address Object DB)

Простое приложение для работы с БД ФИАС, написано для Python 2.7, использует БД PostgreSQL

Содержание

Возможности

  1. API (выходной формат - JSON), основные функции которого:
    • Актуализация AOID, AOGUID.
    • Получение полного дерева адресного объекта по AOID.
    • Поиск адресного объекта по произвольной строке, выдает 10 самых релеватных результатов, может быть "мягким", с более широкими вариациями и исправлением опечаток (для подсказок), или "строгим" (к примеру, для автоматического импорта из внешних систем).
  2. Автоматическое развертывание базы ФИАС
    • Из директории с файлами XML (like 'AS_ADDROBJ_20160107_xxx.XML').
    • Из локального файла архива (.rar).
    • Напрямую с HTTP сервера ФНС.
  3. Актуалиация базы (из XML, HTTP) с возможностью выбора необходимых обновлений.

Установка

Протестирована работа на следующих ОС: Windows (8.1) и Debian Jessie

Зависимости

Внимание! Только Python 2.7, только PostgreSQL, только Sphinx. Python 3, MySQL/MariaDB, Lucene/Solr не поддерживаются и не будут.

Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и 4.5Gb места на диске (3-3.5Gb для скачивания архива с базой и 300-400Mb для индексов Sphinx). Также необходимы root права (Администратора, для OS Windows), для работы searchd и предварительной установки. Рекомендую устанавливать или на отдельном сервере, или на своей машине, либо же на VPS. На shared хостинге работоспособность не гарантируется (только если хостер Вам сам все установит и настроит, и разрешит запуск демонов - читай: "невозможно")

Предварительно обязательно установить и настроить:

  1. Python 2.7.x, pip Для Windows качаем - ставим, для Debian:

    sudo apt-get install python-setuptools
    sudo easy_install pip
    sudo pip install --upgrade pip 
    
  2. PostgreSql 9.5 и выше (из-за синтаксиса ON CONFLICT ... DO) Для Windows, как обычно, качаем - ставим, для Debian:

    sudo sh -c 'echo deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main 9.5 > /etc/apt/sources.list.d/postgresql.list'
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    sudo apt-get update
    sudo apt-get install postgresql-9.5
    

    Затем создайте пользователя и базу данных и установите расширение pg_trgm:

    sudo adduser phias
    sudo -u postgres psql
    postgres=# CREATE DATABASE fias_db;
    postgres=# CREATE USER phias WITH password 'phias';
    postgres=# GRANT ALL privileges ON DATABASE fias_db TO phias;
    postgres=# ALTER USER phias WITH SUPERUSER;
    postgres=# \q
    sudo -u phias psql -d fias_db -U phias
    postgres=# CREATE EXTENSION pg_trgm SCHEMA public;
    
  3. Sphinx 2.2.1 и новее: Windows, Debian:

    cd /tmp
    wget http://sphinxsearch.com/files/sphinx-2.2.10-release.tar.gz
    tar xzf sphinx-2.2.10-release.tar.gz
    cd sphinx-2.2.10-release
    sudo apt-get install postgresql-server-dev-9.5
    ./configure --without-mysql --with-pgsql
    make
    sudo make install
    
  4. Web-сервер с поддержкой WSGI, любой, по Вашему желанию.

Windows

  1. Установить lxml, через pip не ставится, так что качаем отсюда.

  2. Установить unrar.exe (можно установить WinRar целиком).

  3. Установить sphinxapi последней версии (либо взять из директории Sphinx):

    python -m pip install https://github.com/Romamo/sphinxapi/zipball/master
    
  4. Установить приложение, скачав релиз https://github.com/jar3b/py-phias/archive/v0.0.2.zip, распакуйте его в удобное Вам место и запустите оттуда python -m pip install -r requirements.txt

Debian Linux

  1. Установить libxml:

    sudo apt-get install python-dev libxml2 libxml2-dev libxslt-dev
    
  2. Установить unrar (non-free):

    sudo sh -c 'echo deb ftp://ftp.us.debian.org/debian/ stable main non-free > /etc/apt/sources.list.d/non-free.list'
    sudo apt-get update
    sudo apt-get install unrar
    
  3. Установить sphinxapi последней версии:

    sudo pip install https://github.com/Romamo/sphinxapi/zipball/master
    
  4. Установить, собственно, приложение:

  • полностью:

    sudo mkdir -p /var/www/py-phias
    sudo chown phias: /var/www/py-phias
    wget https://github.com/jar3b/py-phias/archive/v0.0.2.tar.gz
    sudo -u phias tar xzf v0.0.1.tar.gz -C /var/www/py-phias --strip-components=1
    cd /var/www/py-phias
    sudo pip install -r requirements.txt
    
  • как repo:

    sudo mkdir -p /var/www/py-phias
    sudo chown phias: /var/www/py-phias
    cd /var/www
    sudo -u phias -H git clone --branch=master https://github.com/jar3b/py-phias.git py-phias
    sudo pip install -r requirements.txt
    

Настройка

Первоначальная настройка базы данных

  1. Настроим конфиг, он лежит в aore/config/__init__.py, в этом файле можно изменить .dev на .prod, отредактировать, соотвественно, dev.py или prod.py: прописать параметры доступа к базе и путь, куда будут сохраняться данные Sphinx; по этому пути дополнительно необходимо создать 3 папки: log, run и data

  2. Создадим базу:

  • из архива sudo -u phias python manage.py -b create -s /tmp/fias_xml.rar
  • из директории sudo -u phias python manage.py -b create -s /tmp/fias_xml_unpacked
  • онлайн, с сервера ФНС sudo -u phias python manage.py -b create -s http Также, можно указать конкретную версию ФИАС только при http загрузке, с ключом --update-version <num>, где num - номер версии ФИАС, все доступные версии можно получить, выполнив manage.py -v.
  1. Проиндексируем Sphinx:
  • Windows: python manage.py -c -i C://sphinx//indexer.exe -o C://sphinx//sphinx.conf
  • Debian: sudo python manage.py -c -i indexer -o /usr/local/sphinx/etc/sphinx.conf
  1. Затем запустим searchd:
  • Windows: net start sphinxsearch, при этом файл настройки должен быть доступен Sphinx'у.
  • Debian: sudo searchd --config /usr/local/sphinx/etc/sphinx.conf
  1. Настроим WSGI server, я использую nginx + passenger, Вы можете использовать любое приемлемое сочетание.
Description
Python application that can operate with FIAS
Readme 229 KiB
Languages
Python 100%