airatkh edited this page Nov 11, 2014 · 3 revisions

#Скрипт для обновления база ФИАС#

Команда запуска:

В директории проекта папка “protected” команда:

user@hostname:/wj_social_net/protected$ php yiic addressupdate
Usage: yiic.php addressupdate <action>
Actions:
    updateByXmlId --VersionId=value
    allDownloadFileInfo
    getInfoAboutLastUpdate
    update2LastVersion

###Описание параметров:

Данные параметры запускаються в ручном режиме.

getInfoAboutLastUpdate - предостовляет информацию о последнем обновлении из таблицы wj_varible

Пример запуска:

user@hostname:/wj_social_net/protected$ php yiic addressupdate getInfoAboutLastUpdate

Пример вывода:

Information about last update: 
VersionId = 105
TextVersion = БД ФИАС от 26.05.2014

allDownloadFileInfo - выводит информацию о всех доступных файлах для обновления. Выводит в терминал и в файл логирования protected/runtime/AddressUpdateCommand.log

Пример запуска:

user@hostname:/wj_social_net/protected$ php yiic addressupdate allDownloadFileInfo

Пример вывода:

(
    'GetAllDownloadFileInfoResult' => array
    (
        'DownloadFileInfo' => array
        (
            0 => array
            (
                'VersionId' => 10
                'TextVersion' => 'БД ФИАС от 24.04.2012'
                'FiasCompleteDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/fias_dbf.rar'
                'FiasCompleteXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/fias_xml.rar'
                'Kladr4ArjUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/BASE.ARJ'
                'Kladr47ZUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/BASE.7Z'
            )
            1 => array
            (
                'VersionId' => 11
                'TextVersion' => 'БД ФИАС от 16.05.2012'
                'FiasCompleteDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/fias_dbf.rar'
                'FiasCompleteXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/fias_xml.rar'
                'FiasDeltaDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/fias_delta_dbf.rar'
                'FiasDeltaXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/fias_delta_xml.rar'
                'Kladr4ArjUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/BASE.ARJ'
                'Kladr47ZUrl' => 'http://fias.nalog.ru/Public/Downloads/20120516/BASE.7Z'
            )
…….

            92 => array
            (
                'VersionId' => 103
                'TextVersion' => 'БД ФИАС от 12.05.2014'
                'FiasCompleteDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/fias_dbf.rar'
                'FiasCompleteXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/fias_xml.rar'
                'FiasDeltaDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/fias_delta_dbf.rar'
                'FiasDeltaXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/fias_delta_xml.rar'
                'Kladr4ArjUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/BASE.ARJ'
                'Kladr47ZUrl' => 'http://fias.nalog.ru/Public/Downloads/20140512/BASE.7Z'
            )
        )
    )

updateByXmlId --VersionId=value скачивает обновление согласно значению --VersionId . Этот ID можно определить из результата работы предыдущий команды c параметром allDownloadFileInfo

Пример запуска:

Скачае Дельту от "TextVersion" => БД ФИАС от 12.05.2014" числа.

user@hostname:/wj_social_net/protected$ php yiic addressupdate updateByXmlId --VersionId=103

Параметр который запускаеться в автоматическом режиме.

Update2LastVersion - Автоматическое обновление до последней версии.

Алгоритм работы:

  1. Узнать ID версии в системе. (getVersionId)
  2. Узнать ID последней верии на сайте ФИАС (getFiasVersionId)
  3. Сравнение двух значений. (compareID)
  4. Выполнение обновление до последней версии в ФИАС (updateFromLocalIdToFiasId)

Пример запуска:

user@hostname:/wj_social_net/protected$ php yiic addressupdate Update2LastVersion

Требования:

  • Наличие директории: ...........wj_social_net/tmp/uploads
  • Наличие команды для рапаковки архива (смотри ниже):
/** * @var string Команда с параметрами, для разархивирования скаченного XML архива. * x - Extract files with full path * -o+ - Overwrite existing files.
*/
private $_cmdUnRarPath = 'unrar x -o+';

Рекомендации:

Если выполнять импорт полной базы рекомендую установить переменну максимальной, чтоб избежать переполнение памяти.

memory_limit 128M

Код очень хорошо комментирован. Детали тонких настроек можно посмотреть в скрипте AddressUpdateCommand.php Так же на сайте фиас fias

Пошаговое тестирование:

Тестирую yii command addressUpdate:

1)[airat@sandbox1 protected]$ php yiic.php addressupdate getInfoAboutLastUpdate

PHP Warning:  Module 'mongo' already loaded in Unknown on line 0
Information about last update: 
VersionId = 105
TextVersion = БД ФИАС от 26.05.2014
[airat@sandbox1 protected]$ 

Result: Good

2)[airat@sandbox1 protected]$ php yiic.php addressupdate allDownloadFileInfo

AllDownloadFileInfo: 
.array
(
    'GetAllDownloadFileInfoResult' => array
    (
        'DownloadFileInfo' => array
        (
            0 => array
            (
                'VersionId' => 10
                'TextVersion' => 'БД ФИАС от 24.04.2012'
                'FiasCompleteDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/fias_dbf.rar'
                'FiasCompleteXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/fias_xml.rar'
                'Kladr4ArjUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/BASE.ARJ'
                'Kladr47ZUrl' => 'http://fias.nalog.ru/Public/Downloads/20120424/BASE.7Z'
            )
            1 => array
........................................
           94 => array
            (
                'VersionId' => 105
                'TextVersion' => 'БД ФИАС от 26.05.2014'
                'FiasCompleteDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/fias_dbf.rar'
                'FiasCompleteXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/fias_xml.rar'
                'FiasDeltaDbfUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/fias_delta_dbf.rar'
                'FiasDeltaXmlUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/fias_delta_xml.rar'
                'Kladr4ArjUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/BASE.ARJ'
                'Kladr47ZUrl' => 'http://fias.nalog.ru/Public/Downloads/20140526/BASE.7Z'
            )
        )
    )

Result: Good

3)Пошаговое скачиваем VersionId == 104 За 'TextVersion' => 'БД ФИАС от 26.05.2014' Число.

Проверка Значение в таблице variable должно поменяться на VersionId == 104 Смотрю лог файл в реальном времени:

[airat@sandbox1 runtime]$ pwd
/home/airat/public_html/protected/runtime
[airat@sandbox1 runtime]$ tail -f AddressUpdateCommand.log

3.1)[airat@sandbox1 protected]$ php yiic.php addressupdate updateByXmlId --VersionId=104

В другом окне выполнил команду: 3.2)[airat@sandbox1 protected]$ php yiic.php addressupdate getInfoAboutLastUpdate

[airat@sandbox1 protected]$ php yiic.php addressupdate getInfoAboutLastUpdate
PHP Warning:  Module 'mongo' already loaded in Unknown on line 0
Information about last update: 
VersionId = 104
TextVersion = БД ФИАС от 19.05.2014
[airat@sandbox1 protected]$ 

Result: Good. Значение поменялось на тот VersionId который мы заказали. Логирование сообщает что

2014/05/29 17:13:35 [info] [application.commands.AddressUpdateCommand] Найдена существующая запись для :   AS_HOUSE . Data: 
Array
(
    [original_guid] => 19cd2ee0-8d54-46e6-af32-e39e8fe7bfca
    [post_index] => 140700
    [house_number] => 75к
    [build_number] => 
    [struc_number] => 
    [address_object_uid] => 968c4f91-e720-421a-9ce6-1eb5f93e5820
    [latitude] => 
    [longitude] => 
    [region] => 
    [osm_id] => 
    [osm_display_name] => 
    [uuid] => 64c5e95c-4eab-471c-b965-b098b610c36b
)

Далее остановил загрузку VersionId=104 принудительно

4)Тестирую Update2LastVersion - Автоматическое обновление до последней версии.

Сейчас у нас VersionId=104 , после выполнению предыдущей команды.

Выполняю: 4.1)[airat@sandbox1 protected]$ php yiic.php addressupdate update2LastVersion

4.2)Смотрю логи, команда

[airat@sandbox1 runtime]$ pwd
/home/airat/public_html/protected/runtime
[airat@sandbox1 runtime]$ tail -f AddressUpdateCommand.log

Result: Good.

Появилась надпись "Индефикатор ID в таблице variable меньше ID с сайта ФИАС. Требуеться выполнить обновление. Значение поменялось на VersionId=105 это следующее

[airat@sandbox1 protected]$ php yiic.php addressupdate getInfoAboutLastUpdate
PHP Warning:  Module 'mongo' already loaded in Unknown on line 0
Information about last update: 
VersionId = 105
TextVersion = БД ФИАС от 26.05.2014

Логирование сообщает что процесс идет.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.