zabaraindustry / dadata
通过Dadata API进行数据清洗、丰富和建议
1.1.1
2022-03-31 11:52 UTC
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-09-27 21:49:07 UTC
README
通过Dadata API进行数据清洗、丰富和建议
Dadata API的薄PHP包装器。
安装
composer require hflabs/dadata
要求
- PHP 5.6+
- Guzzle 6
用法
创建API客户端实例
> $token = "Replace with Dadata API key";
> $secret = "Replace with Dadata secret key";
> $dadata = new \Dadata\DadataClient($token, $secret);
然后按照以下方式调用API方法。
邮政地址
验证和清洗地址
> $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) {...}
}
地理编码地址
与"验证和清洗"相同的API方法
> $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)
...
}
反向地理编码地址
> $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
> $response = $dadata->iplocate("46.226.227.20");
> var_dump($response);
array(3) {
["value"]=>
string(21) "г Краснодар"
["unrestricted_value"]=>
string(66) "350000, Краснодарский край, г Краснодар"
["data"]=>
array(81) {
...
}
}
自动完成(建议)地址
> $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) "г Самара, поселок Зубчаниновка, ул Металлургическая"
...
}
...
}
用英语显示建议
> $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"
...
}
...
}
按城市(南萨哈林斯克)限制
> $locations = [[ "kladr_id" => "6500000100000" ]];
> $response = $dadata->suggest("address", "Ватутина", 5, ["locations" => $locations]);
> var_dump($response);
array(1) {
[0]=>
array(3) {
["value"]=>
string(53) "г Южно-Сахалинск, ул Ватутина"
...
}
}
按特定地理点及其半径(在沃洛格达市)限制
> $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 = [[ "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) "Самарская обл, г Тольятти, ул Автостроителей"
...
}
...
}
通过FIAS ID查找地址
> $response = $dadata->findById("address", "9120b43f-2fae-4838-a144-85e43c2bfb29");
> var_dump($response);
array(1) {
[0]=>
array(3) {
["value"]=>
string(36) "г Москва, ул Снежная"
...
}
}
通过KLADR ID查找
> $response = $dadata->findById("address", "77000000000268400");
查找邮局
通过地址或代码建议邮局
> $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) {
...
}
}
}
通过代码查找邮局
> $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) {
...
}
}
}
查找最近的邮局
> $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) {
...
}
},
...
}
获取城市ID以供配送服务使用
> $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"
}
}
}
严格根据FIAS获取地址
> $response = $dadata->findById("fias", "9120b43f-2fae-4838-a144-85e43c2bfb29");
> var_dump($response);
array(1) {
[0]=>
array(3) {
["value"]=>
string(36) "г Москва, ул Снежная"
...
}
}
建议国家
> $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) "Тайвань"
...
}
...
}
公司或个体工商户
通过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"
...
}
},
...
}
通过INN和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"
...
}
}
}
建议公司
> $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) "АО "СБЕРБРОКЕР""
...
}
...
}
按特定区域(圣彼得堡和列宁格勒州)限制
> $locations = [[ "kladr_id" => "7800000000000" ], [ "kladr_id" => "4700000000000"]];
> $response = $dadata->suggest("party", "сбер", 5, ["locations" => $locations]);
按活跃公司限制
> $status = [ "ACTIVE" ];
> $response = $dadata->suggest("party", "сбер", 5, ["status" => $status]);
按个体工商户限制
> $response = $dadata->suggest("party", "сбер", 5, ["type" => "INDIVIDUAL"]);
按母公司,无分支机构限制
> $branch_type = [ "MAIN" ];
> $response = $dadata->suggest("party", "сбер", 5, ["branch_type" => $branch_type]);
查找关联公司
> $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) "ООО "ЗНАНИЕ""
...
}
...
}
仅按经理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) "АНО ДПО "ШАД""
...
}
}
银行
通过BIC、SWIFT或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"
...
}
}
}
通过SWIFT代码查找
> $response = $dadata->findById("bank", "SABRRUMM");
通过INN查找
> $response = $dadata->findById("bank", "7728168971");
通过INN和KPP查找
> $response = $dadata->findById("bank", "7728168971", 1, ["kpp" => "667102002"]);
通过注册号查找
> $response = $dadata->findById("bank", "1481");
建议银行
> $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) "«Азиатско-Тихоокеанский Банк» (ПАО)"
...
}
...
}
个人姓名
验证和清洗姓名
> $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)
}
建议姓名
> $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) "Викторова"
...
}
...
}
建议女性名字
> $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) "Викторина"
...
}
}
电话
验证和清洗电话
> $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)
}
护照
验证护照
> $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)
}
建议发行机构
> $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) "ОВД ЗЮЗИНО ПС УВД ЮЗАО Г. МОСКВЫ"
...
}
...
}
电子邮件
验证电子邮件
> $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)
}
建议电子邮件
> $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"
...
}
...
}
其他数据集
税务局
> $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"
...
}
}
}
地区法院
> $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 Таганского судебного района г. Москвы"
...
}
...
}
地铁站
> $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"
...
}
...
}
按城市(圣彼得堡)限制
> $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"
...
}
}
汽车品牌
> $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"
...
}
}
货币
> $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) "Услуги по обрезинованию валенок (рыбацкие калоши)"
...
}
}
配置文件API
余额
> $response = $dadata->getBalance();
> var_dump($response);
float(8238.20)
使用统计
> $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)
}
}
数据集版本
> $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) {
...
}
}
}
开发设置
$ composer install
$ ./vendor/bin/phpunit tests
贡献
欢迎提交拉取请求。对于重大更改,请首先打开一个问题以讨论您想要更改的内容。
确保根据需要添加或更新测试。
使用Conventional Commits进行提交信息。
变更日志
此库使用CalVer,采用YY.MM.MICRO架构。有关每个版本的详细信息,请参阅变更日志。