tochka-developers / unification-address
Splitting the postal address of the Russian Federation into parts
v0.2.16
2023-10-18 10:22 UTC
Requires
- php: >=7.3
- guzzlehttp/guzzle: ^6.5|^7.4
- illuminate/pipeline: ^5.0|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- phpunit/phpunit: ^7.0
README
Реализация парсинга адреса РФ на составные части для Laravel. На данный момент парсинг делается с помощью апи Почты России и апи сервиса DaData (стандартизация). Результаты запросов кешируются, управление через настройки кеширования Laravel.
Поддерживаемые версии:
- Laravel | Lumen >= 5.0
- PHP 7.4 | 8.0
Установка
Установка через composer:
composer require tochka/unification-address
Публикуем конфигурацию для всех пакетов:
php artisan vendor:publish
Для Lumen нужно самостоятельно подключить UnifAddressServiceProvider
Конфигурация
return [ // Предфильтр для предварительной обработки строки адреса по кастомным правилам. // По-умолчанию не производится. Можно реализовать на стороне внешнего сервиса. // Должен реализовать интерфейс Tochka\Unif\Address\Contracts\PreFilterInterface 'pre_filter_handler' => null /*\App\Service\AddressPreFilter::class*/, // Список источников обработки строки адреса. Адрес парсится последовательно, до первого успешного результата. // Если ни один из источников не дал приемлемого результата - вернется null. 'processing_sources' => [ // Класс можно отнаследовать или реализовать свой. При самостоятельной реализации источника // обработки класс нужно реализовать от интерфейса Tochka\Unif\Address\Contracts\SourceInterface \Tochka\Unif\Address\Sources\RusPost::class => [ // Здесь нужно передавать авторизационные данные источника 'token' => env('RusPost_ACCESS_TOKEN'), 'user' => env('RusPost_USER'), 'pass' => env('RusPost_PASS'), ], \Tochka\Unif\Address\Sources\DaData::class => [ // Здесь нужно передавать авторизационные данные источника 'token' => env('DADATA_TOKEN'), 'secret' => env('DADATA_SECRET') ] ] ];
Пример
$address = '115114 Москва г. наб. Дербеневская, д. 11 к А - 311'; $enrichedAddress = app(UnifAddress::class)->parsing($address);
В $enrichedAddress
возвращается массив, разбитого по частям, адреса
[ "postindex" => "115114" // почтовый индекс "region" => "г Москва" // регион, область, край, республика "area" => null // район в регионе "city" => "Москва" // город, населенный пункт "isSettlement" => false // Признак населенного пункта (пгт, деревня, село, хутор) "address" => "наб Дербеневская, д 11А" // адрес "street" => "наб Дербеневская" // улица "house" => "11А" // номер дома "block" => null // корпус/строение "flat" => null // квартира/офис "unparsed" => "311" // нераспознанная часть адреса "quality" => "good" // Качество распознавания адреса: good - доп. обработка не требуется, need_check - нужна проверка ]