hflabs / dadata
Data cleansing, enrichment and suggestions via Dadata API
Requires
- php: >=5.6.0
- guzzlehttp/guzzle: ~6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-12-19 10:19:33 UTC
README
Data cleansing, enrichment and suggestions via Dadata API
Thin PHP wrapper over Dadata API.
Installation
composer require hflabs/dadata
Requirements:
- PHP 5.6+
- Guzzle 6 or 7
Usage
Create API client instance:
> $token = "Replace with Dadata API key"; > $secret = "Replace with Dadata secret key"; > $dadata = new \Dadata\DadataClient($token, $secret);
Then call API methods as specified below.
Postal Address
Validate and cleanse address
> $response = $dadata->clean("address", "мск сухонская 11 89"); > var_dump($response); array(80) { ["source"]=> string(31) "мск сухонская 11 89" ["result"]=> string(56) "г Москва, ул Сухонская, д 11, кв 89" ["postal_code"]=> string(6) "127642" ["country"]=> string(12) "Россия" ["federal_district"]=> string(22) "Центральный" ["region"]=> string(12) "Москва" ["city_area"]=> string(31) "Северо-восточный" ["city_district"]=> string(37) "Северное Медведково" ["street"]=> string(18) "Сухонская" ["house"]=> string(2) "11" ["flat"]=> string(2) "89" ["flat_area"]=> string(4) "34.6" ["flat_price"]=> string(7) "6854710" ["fias_id"]=> string(36) "5ee84ac0-eb9a-4b42-b814-2f5f7c27c255" ["timezone"]=> string(5) "UTC+3" ["geo_lat"]=> string(10) "55.8782557" ["geo_lon"]=> string(8) "37.65372" ["qc_geo"]=> int(0) ["metro"]=> array(3) {...} }
Geocode address
Same API method as "validate and cleanse":
> $response = $dadata->clean("address", "мск сухонская 11 89"); > var_dump($response); array(80) { ["source"]=> string(31) "мск сухонская 11 89" ["result"]=> string(56) "г Москва, ул Сухонская, д 11, кв 89" ... ["geo_lat"]=> string(10) "55.8782557" ["geo_lon"]=> string(8) "37.65372" ["beltway_hit"]=> string(7) "IN_MKAD" ["beltway_distance"]=> NULL ["qc_geo"]=> int(0) ... }
Reverse geocode address
> $response = $dadata->geolocate("address", 55.878, 37.653); > var_dump($response); array(4) { [0]=> array(3) { ["value"]=> string(47) "г Москва, ул Сухонская, д 11" ... } [1]=> array(3) { ["value"]=> string(49) "г Москва, ул Сухонская, д 11А" ... } [2]=> array(3) { ["value"]=> string(47) "г Москва, ул Сухонская, д 13" ... } ... }
GeoIP city
> $response = $dadata->iplocate("46.226.227.20"); > var_dump($response); array(3) { ["value"]=> string(21) "г Краснодар" ["unrestricted_value"]=> string(66) "350000, Краснодарский край, г Краснодар" ["data"]=> array(81) { ... } }
Autocomplete (suggest) address
> $response = $dadata->suggest("address", "самара метал"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(49) "г Самара, пр-кт Металлургов" ... } [1]=> array(3) { ["value"]=> string(44) "г Самара, ул Металлистов" ... } [2]=> array(3) { ["value"]=> string(95) "г Самара, поселок Зубчаниновка, ул Металлургическая" ... } ... }
Show suggestions in English:
> $response = $dadata->suggest("address", "samara metal", 5, ["language" => "en"]); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(42) "Russia, gorod Samara, prospekt Metallurgov" ... } [1]=> array(3) { ["value"]=> string(39) "Russia, gorod Samara, ulitsa Metallistov" ... } [2]=> array(3) { ["value"]=> string(69) "Russia, gorod Samara, poselok Zubchaninovka, ulitsa Metallurgicheskaya" ... } ... }
Constrain by city (Yuzhno-Sakhalinsk):
> $locations = [[ "kladr_id" => "6500000100000" ]]; > $response = $dadata->suggest("address", "Ватутина", 5, ["locations" => $locations]); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(53) "г Южно-Сахалинск, ул Ватутина" ... } }
Constrain by specific geo point and radius (in Vologda city):
> $geo = [[ "lat" => 59.244634, "lon" => 39.913355, "radius_meters" => 200 ]]; > $response = $dadata->suggest("address", "сухонская", 5, ["locations_geo" => $geo]); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(42) "г Вологда, ул Сухонская" ... } }
Boost city to top (Toliatti):
> $boost = [[ "kladr_id" => "6300000700000" ]]; > $response = $dadata->suggest("address", "авто", 5, ["locations_boost" => $boost]); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(85) "Самарская обл, г Тольятти, Автозаводское шоссе" ... } [1]=> array(3) { ["value"]=> string(81) "Самарская обл, г Тольятти, ул Автомобилистов" ... } [2]=> array(3) { ["value"]=> string(81) "Самарская обл, г Тольятти, ул Автостроителей" ... } ... }
Find address by FIAS ID
> $response = $dadata->findById("address", "9120b43f-2fae-4838-a144-85e43c2bfb29"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(36) "г Москва, ул Снежная" ... } }
Find by KLADR ID:
> $response = $dadata->findById("address", "77000000000268400");
Find postal office
Suggest postal office by address or code:
> $response = $dadata->suggest("postal_unit", "дежнева 2а"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(6) "127642" ["unrestricted_value"]=> string(52) "г Москва, проезд Дежнёва, д 2А" ["data"]=> array(15) { ... } } }
Find postal office by code:
> $response = $dadata->findById("postal_unit", "127642"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(6) "127642" ["unrestricted_value"]=> string(52) "г Москва, проезд Дежнёва, д 2А" ["data"]=> array(15) { ... } } }
Find nearest postal office:
> $response = $dadata->geolocate("postal_unit", 55.878, 37.653, 1000); > var_dump($response); array(2) { [0]=> array(3) { ["value"]=> string(6) "127642" ["unrestricted_value"]=> string(52) "г Москва, проезд Дежнёва, д 2А" ["data"]=> array(15) { ... } }, ... }
Get City ID for delivery services
> $response = $dadata->findById("delivery", "3100400100000"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(13) "3100400100000" ["unrestricted_value"]=> string(36) "fe7eea4a-875a-4235-aa61-81c2a37a0440" ["data"]=> array(5) { ... ["boxberry_id"]=> string(5) "01929" ["cdek_id"]=> string(3) "344" ["dpd_id"]=> string(9) "196006461" } } }
Get address strictly according to FIAS
> $response = $dadata->findById("fias", "9120b43f-2fae-4838-a144-85e43c2bfb29"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(36) "г Москва, ул Снежная" ... } }
Suggest country
> $response = $dadata->suggest("country", "та"); > var_dump($response); array(4) { [0]=> array(3) { ["value"]=> string(22) "Таджикистан" ... }, [1]=> array(3) { ["value"]=> string(14) "Таиланд" ... } [2]=> array(3) { ["value"]=> string(14) "Тайвань" ... } ... }
Company or individual enterpreneur
Find company by INN
> $response = $dadata->findById("party", "7707083893"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(23) "ПАО СБЕРБАНК" ["unrestricted_value"]=> string(23) "ПАО СБЕРБАНК" ["data"]=> array(29) { ["kpp"]=> string(9) "773601001" ["inn"]=> string(10) "7707083893" ... } }, ... }
Find by INN and KPP:
> $response = $dadata->findById("party", "7707083893", 1, ["kpp" => "540602001"]); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(51) "СИБИРСКИЙ БАНК ПАО СБЕРБАНК" ["unrestricted_value"]=> string(51) "СИБИРСКИЙ БАНК ПАО СБЕРБАНК" ["data"]=> array(29) { ["kpp"]=> string(9) "540602001" ["inn"]=> string(10) "7707083893" ... } } }
Suggest company
> $response = $dadata->suggest("party", "сбер"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(23) "ПАО СБЕРБАНК" ... } [1]=> array(3) { ["value"]=> string(48) "АО "СБЕРЭНЕРГОСЕРВИС-ЮГРА"" ... } [2]=> array(3) { ["value"]=> string(27) "АО "СБЕРБРОКЕР"" ... } ... }
Constrain by specific regions (Saint Petersburg and Leningradskaya oblast):
> $locations = [[ "kladr_id" => "7800000000000" ], [ "kladr_id" => "4700000000000"]]; > $response = $dadata->suggest("party", "сбер", 5, ["locations" => $locations]);
Constrain by active companies:
> $status = [ "ACTIVE" ]; > $response = $dadata->suggest("party", "сбер", 5, ["status" => $status]);
Constrain by individual entrepreneurs:
> $response = $dadata->suggest("party", "сбер", 5, ["type" => "INDIVIDUAL"]);
Constrain by head companies, no branches:
> $branch_type = [ "MAIN" ]; > $response = $dadata->suggest("party", "сбер", 5, ["branch_type" => $branch_type]);
Find affiliated companies
> $response = $dadata->findAffiliated("7736207543"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(36) "ООО "ДЗЕН.ПЛАТФОРМА"" ... } [1]=> array(3) { ["value"]=> string(21) "ООО "ЕДАДИЛ"" ... } [2]=> array(3) { ["value"]=> string(21) "ООО "ЗНАНИЕ"" ... } ... }
Search only by manager INN:
> $response = $dadata->findAffiliated("773006366201", 5, ["scope" => "MANAGERS"]); > var_dump($response); array(3) { [0]=> array(3) { ["value"]=> string(21) "ООО "ЯНДЕКС"" ... } [1]=> array(3) { ["value"]=> string(13) "МФ "ФОИ"" ... } [2]=> array(3) { ["value"]=> string(22) "АНО ДПО "ШАД"" ... } }
Bank
Find bank by BIC, SWIFT or INN
> $response = $dadata->findById("bank", "044525225"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(23) "ПАО Сбербанк" ["unrestricted_value"]=> string(23) "ПАО Сбербанк" ["data"]=> array(14) { ["bic"]=> string(9) "044525225" ["swift"]=> string(8) "SABRRUMM" ["inn"]=> string(10) "7707083893" ... } } }
Find by SWIFT code:
> $response = $dadata->findById("bank", "SABRRUMM");
Find by INN:
> $response = $dadata->findById("bank", "7728168971");
Find by INN and KPP:
> $response = $dadata->findById("bank", "7728168971", 1, ["kpp" => "667102002"]);
Find by registration number:
> $response = $dadata->findById("bank", "1481");
Suggest bank
> $response = $dadata->suggest("bank", "ти"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(28) "АО «Тимер Банк»" ... } [1]=> array(3) { ["value"]=> string(34) "АО «Тинькофф Банк»" ... } [2]=> array(3) { ["value"]=> string(65) "«Азиатско-Тихоокеанский Банк» (ПАО)" ... } ... }
Personal name
Validate and cleanse name
> $response = $dadata->clean("name", "Срегей владимерович иванов"); > var_dump($response); array(10) { ["source"]=> string(50) "Срегей владимерович иванов" ["result"]=> ... ["surname"]=> string(12) "Иванов" ["name"]=> string(12) "Сергей" ["patronymic"]=> string(24) "Владимирович" ["gender"]=> string(2) "М" ["qc"]=> int(1) }
Suggest name
> $response = $dadata->suggest("fio", "викт"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(12) "Виктор" ... } [1]=> array(3) { ["value"]=> string(16) "Виктория" ... } [2]=> array(3) { ["value"]=> string(18) "Викторова" ... } ... }
Suggest female first name:
> $filter = ["parts" => ["NAME"], gender => "FEMALE"]; > $response = $dadata->suggest("fio", "викт", 5, $filter); > var_dump($response); array(2) { [0]=> array(3) { ["value"]=> string(16) "Виктория" ... } [1]=> array(3) { ["value"]=> string(18) "Викторина" ... } }
Phone
Validate and cleanse phone
> $response = $dadata->clean("phone", "9168-233-454"); > var_dump($response); array(14) { ["source"]=> string(12) "9168-233-454" ["type"]=> string(18) "Мобильный" ["phone"]=> string(16) "+7 916 823-34-54" ... ["provider"]=> string(50) "ПАО "Мобильные ТелеСистемы"" ["country"]=> string(12) "Россия" ["region"]=> string(51) "Москва и Московская область" ["timezone"]=> string(5) "UTC+3" ["qc"]=> int(0) }
Passport
Validate passport
> $response = $dadata->clean("passport", "4509 235857"); > var_dump($response); array(4) { ["source"]=> string(11) "4509 235857" ["series"]=> string(5) "45 09" ["number"]=> string(6) "235857" ["qc"]=> int(0) }
Suggest issued by
> $response = $dadata->suggest("fms_unit", "772 053"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(36) "ОВД ЗЮЗИНО Г. МОСКВЫ" ... } [1]=> array(3) { ["value"]=> string(68) "ОВД ЗЮЗИНО Г. МОСКВЫ ПАСПОРТНЫЙ СТОЛ 1" ... } [2]=> array(3) { ["value"]=> string(57) "ОВД ЗЮЗИНО ПС УВД ЮЗАО Г. МОСКВЫ" ... } ... }
Validate email
> $response = $dadata->clean("email", "serega@yandex/ru"); > var_dump($response); array(6) { ["source"]=> string(16) "serega@yandex/ru" ["email"]=> string(16) "serega@yandex.ru" ["local"]=> string(6) "serega" ["domain"]=> string(9) "yandex.ru" ["type"]=> string(8) "PERSONAL" ["qc"]=> int(4) }
Suggest email
> $response = $dadata->suggest("email", "maria@"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(13) "maria@mail.ru" ... } [1]=> array(3) { ["value"]=> string(15) "maria@gmail.com" ... } [2]=> array(3) { ["value"]=> string(15) "maria@yandex.ru" ... } ... }
Other datasets
Tax office
> $response = $dadata->findById("fns_unit", "5257"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(118) "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода" ["unrestricted_value"]=> string(118) "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода" ["data"]=> array(18) { ["code"]=> string(4) "5257" ["oktmo"]=> string(8) "22701000" ["inn"]=> string(10) "5257046101" ["kpp"]=> string(9) "525701001" ... } } }
Regional court
> $response = $dadata->suggest("region_court", "таганско"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(109) "Судебный участок № 371 Таганского судебного района г. Москвы" ... } [1]=> array(3) { ["value"]=> string(109) "Судебный участок № 372 Таганского судебного района г. Москвы" ... } [2]=> array(3) { ["value"]=> string(109) "Судебный участок № 373 Таганского судебного района г. Москвы" ... } ... }
Metro station
> $response = $dadata->suggest("metro", "алекс"); > var_dump($response); array(4) { [0]=> array(3) { ["value"]=> string(37) "Александровский сад" ... } [1]=> array(3) { ["value"]=> string(24) "Алексеевская" ... } [2]=> array(3) { ["value"]=> string(54) "Площадь Александра Невского 1" ... } ... }
Constrain by city (Saint Petersburg):
> $filters = [[ "city" => "Санкт-Петербург" ]]; > $response = $dadata->suggest("metro", "алекс", 5, ["filters" => $filters]); > var_dump($response); array(2) { [0]=> array(3) { ["value"]=> string(54) "Площадь Александра Невского 1" ... } [1]=> array(3) { ["value"]=> string(54) "Площадь Александра Невского 2" ... } }
Car brand
> $response = $dadata->suggest("car_brand", "фо"); > var_dump($response); array(3) { [0]=> array(3) { ["value"]=> string(10) "Volkswagen" ... } [1]=> array(3) { ["value"]=> string(4) "Ford" ... } [2]=> array(3) { ["value"]=> string(5) "Foton" ... } }
Currency
> $response = $dadata->suggest("currency", "руб"); > var_dump($response); array(2) { [0]=> array(3) { ["value"]=> string(33) "Белорусский рубль" ... } [1]=> array(3) { ["value"]=> string(31) "Российский рубль" ... } }
OKVED 2
> $response = $dadata->suggest("okved2", "космических"); > var_dump($response); array(5) { [0]=> array(3) { ["value"]=> string(139) "Производство космических аппаратов (в том числе спутников), ракет-носителей" ... } [1]=> array(3) { ["value"]=> string(139) "Производство частей и принадлежностей летательных и космических аппаратов" ... } [2]=> array(3) { ["value"]=> string(95) "Производство автоматических космических аппаратов" ... } ... }
OKPD 2
> $response = $dadata->suggest("okpd2", "калоши"); > var_dump($response); array(1) { [0]=> array(3) { ["value"]=> string(91) "Услуги по обрезинованию валенок (рыбацкие калоши)" ... } }
Profile API
Balance:
> $response = $dadata->getBalance(); > var_dump($response); float(8238.20)
Usage stats:
> $response = $dadata->getDailyStats(); > var_dump($response); array(2) { ["date"]=> string(10) "2020-07-27" ["services"]=> array(3) { ["merging"]=> int(0) ["suggestions"]=> int(45521) ["clean"]=> int(1200) } }
Dataset versions:
> $response = $dadata->getVersions(); > var_dump($response); array(3) { ["dadata"]=> array(1) { ["version"]=> string(26) "stable (9048:bf33b2acc8ba)" } ["suggestions"]=> array(2) { ["version"]=> string(15) "20.5 (b55eb7c4)" ["resources"]=> array(4) { ... } } ["factor"]=> array(2) { ["version"]=> string(16) "20.06 (eb70078e)" ["resources"]=> array(8) { ... } } }
Development setup
$ composer install $ ./vendor/bin/phpunit tests
Contributing
This project only accepts bug fixes.
Changelog
This project uses CalVer with YY.MM.MICRO schema. See changelog for details specific to each release.