tochka-developers/unification-address

将俄罗斯联邦的邮政地址分割成部分

v0.2.16 2023-10-18 10:22 UTC

README

实现将俄罗斯联邦地址解析成组成部分的Laravel功能。目前解析通过俄罗斯邮政API和DaData服务API(标准化)进行。查询结果进行缓存,缓存管理通过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 - нужна проверка
]