Сервис DaData: подсказки и стандартизация
30.07.2018
Теги: API • CURL • JavaScript • jQuery • JSON • PHP • POST • Python • Web-разработка
Сервис DaData позволяет создавать подсказки при заполнении формы на сайте: при при вводе адреса, ФИО, организации и банковских реквизитов. Кроме того, есть возможность автоматической проверки и исправления контактных данных (ФИО, адресов, телефонов, email, паспортов). Чтобы использовать возможности сервиса, надо зарегистрироваться и получить API-ключ.
- Подсказки — помогают человеку быстро ввести корректные данные. Подсказывают ФИО, email, почтовые адреса, реквизиты компаний и банков по ходу ввода. Разбивают адрес по ФИАС, реквизиты компании — по ЕГРЮЛ, а для ФИО проставляют пол.
- Стандартизация — автоматически обрабатывает данные:
- исправляет опечатки, транслитерирует и проставляет пол в ФИО;
- склоняет ФИО (кого? кому? кем?);
- приводит адреса к ФИАС, определит округ и район города, геокоординаты, метро, площадь и стоимость квартиры;
- определяет корректный индекс по данным Почты России;
- достаёт коды КЛАДР, ФИАС, ОКАТО, ОКТМО и ИФНС;
- нормализует телефоны, актуализирует DEF-коды, проставляет регионы и часовые пояса;
- проверяет корректность email-адресов перед почтовой рассылкой;
- проверяет серию и номер паспорта через ФМС;
- определяет марку и модель автомобиля.
Подсказки
Подсказки на PHP
Получаем данные юридического лица по ИНН:
<?php class Suggestions { private $url, $token; public function __construct($token, $url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/') { $this->token = $token; $this->url = $url; } public function suggest($resource, $data) { $options = array( 'http' => array( 'method' => 'POST', 'header' => array( 'Content-type: application/json', 'Accept: application/json', 'Authorization: Token ' . $this->token, ), 'content' => json_encode($data), ), ); $context = stream_context_create($options); $result = file_get_contents($this->url . $resource, false, $context); return json_decode($result); } } // получаем данные юр.лица по ИНН $token = 'API_KEY'; $dadata = new Suggestions($token); $query = '7702680818'; $data = array( 'query' => $query ); $resp = $dadata->suggest("party", $data); // название компании print 'Название: ' . $resp->suggestions[0]->value . "<br/>\n"; // КПП print 'КПП: ' . $resp->suggestions[0]->data->kpp . "<br/>\n"; // ОГРН print 'ОГРН: ' . $resp->suggestions[0]->data->ogrn . "<br/>\n"; // ген.директор print 'Ген.директор: ' . $resp->suggestions[0]->data->management->name . "<br/>\n"; // адрес print 'Юр.адрес: ' . $resp->suggestions[0]->data->address->value . "<br/>\n";
Сервис возвращает данные в формате JSON:
{"suggestions": [ { "value":"ООО \"ТД ТИНКО\"", "unrestricted_value":"ООО \"ТД ТИНКО\"", "data": { "kpp":"770201001", "capital":null, "management": { "name":"Клещенок Геннадий Степанович", "post":"Генеральный директор" }, "founders":null, "managers":null, "branch_type":"MAIN", "branch_count":0, "source":null, "qc":null, "hid":"92208432eac7516308bed2d05be360f092e41f10f83d8bf13db9829e6e7f4026", "type":"LEGAL", "state": { "status":"ACTIVE", "actuality_date":1523145600000, "registration_date":1217462400000, "liquidation_date":null }, "opf": { "type":"2014", "code":"12300", "full":"Общество с ограниченной ответственностью", "short":"ООО" }, "name": { "full_with_opf":"ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ \"ТОРГОВЫЙ ДОМ ТИНКО\"", "short_with_opf":"ООО \"ТД ТИНКО\"", "latin":null, "full":"ТОРГОВЫЙ ДОМ ТИНКО", "short":"ТД ТИНКО" }, "inn":"7702680818", "ogrn":"1087746895510", "okpo":null, "okved":"46.43", "okveds":null, "authorities":null, "documents":null, "licenses":null, "address": { "value":"г Москва, ул Щепкина, д 47 стр 1", "unrestricted_value":"г Москва, Мещанский р-н, ул Щепкина, д 47 стр 1", "data": { "postal_code":"129110", "country":"Россия", "region_fias_id":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5", "region_kladr_id":"7700000000000", "region_with_type":"г Москва", "region_type":"г", "region_type_full":"город", "region":"Москва", "area_fias_id":null, "area_kladr_id":null, "area_with_type":null, "area_type":null, "area_type_full":null, "area":null, "city_fias_id":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5", "city_kladr_id":"7700000000000", "city_with_type":"г Москва", "city_type":"г", "city_type_full":"город", "city":"Москва", "city_area":"Центральный", "city_district_fias_id":null, "city_district_kladr_id":null, "city_district_with_type":"Мещанский р-н", "city_district_type":"р-н", "city_district_type_full":"район", "city_district":"Мещанский", "settlement_fias_id":null, "settlement_kladr_id":null, "settlement_with_type":null, "settlement_type":null, "settlement_type_full":null, "settlement":null, "street_fias_id":"52b67c53-d0a5-4ad9-b3f1-294c5dd7a41f", "street_kladr_id":"77000000000317100", "street_with_type":"ул Щепкина", "street_type":"ул", "street_type_full":"улица", "street":"Щепкина", "house_fias_id":"b01844e6-103f-4564-9ffe-b444f545398e", "house_kladr_id":"7700000000031710033", "house_type":"д", "house_type_full":"дом", "house":"47", "block_type":"стр", "block_type_full":"строение", "block":"1", "flat_type":null, "flat_type_full":null, "flat":null, "flat_area":null, "square_meter_price":null, "flat_price":null, "postal_box":null, "fias_id":"b01844e6-103f-4564-9ffe-b444f545398e", "fias_code":"77000000000000031710033", "fias_level":"8", "fias_actuality_state":"0", "kladr_id":"7700000000031710033", "capital_marker":"0", "okato":"45286570000", "oktmo":"45379000", "tax_office":"7702", "tax_office_legal":"7702", "timezone":null, "geo_lat":"55.7813958", "geo_lon":"37.6286469", "beltway_hit":null, "beltway_distance":null, "metro":null, "qc_geo":"0", "qc_complete":null, "qc_house":null, "history_values":null, "unparsed_parts":null, "source":"129110, ГОРОД МОСКВА, УЛИЦА ЩЕПКИНА, 47, СТР.1", "qc":null } }, "phones":null, "emails":null, "ogrn_date":1217462400000, "okved_type":"2014" } } ] }
Чтобы получить ответ в формате XML, надо указать HTTP-заголовки:
Content-Type: application/xml Accept: application/xml
и тело запроса передавать в XML:
<req> <query>7702680818</query> </req>
<?php class Suggestions { private $url, $token; public function __construct($token, $url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/') { $this->token = $token; $this->url = $url; } public function suggest($resource, $data) { $options = array( 'http' => array( 'method' => 'POST', 'header' => array( 'Content-Type: application/xml', 'Accept: application/xml', 'Authorization: Token ' . $this->token, ), 'content' => $data, ), ); $context = stream_context_create($options); return file_get_contents($this->url . $resource, false, $context); } } $token = 'API_KEY'; $dadata = new Suggestions($token); $query = '7702680818'; $data = '<req><query>' . $query . '</query></req>'; $resp = $dadata->suggest("party", $data); echo $resp;
<SuggestResponse> <suggestions> <value>ООО "ТД ТИНКО"</value> <unrestricted_value>ООО "ТД ТИНКО"</unrestricted_value> <data> <kpp>770201001</kpp> <capital/> <management> <name>Клещенок Геннадий Степанович</name> <post>Генеральный директор</post> </management> <founders/> <managers/> <branch_type>MAIN</branch_type> <branch_count>0</branch_count> <source/> <qc/> <hid>92208432eac7516308bed2d05be360f092e41f10f83d8bf13db9829e6e7f4026</hid> <type>LEGAL</type> <state> <status>ACTIVE</status> <actuality_date>1523145600000</actuality_date> <registration_date>1217462400000</registration_date> <liquidation_date/> </state> <opf> <type>2014</type> <code>12300</code> <full>Общество с ограниченной ответственностью</full> <short>ООО</short> </opf> <name> <full_with_opf>ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ТОРГОВЫЙ ДОМ ТИНКО"</full_with_opf> <short_with_opf>ООО "ТД ТИНКО"</short_with_opf> <latin/> <full>ТОРГОВЫЙ ДОМ ТИНКО</full> <short>ТД ТИНКО</short> </name> <inn>7702680818</inn> <ogrn>1087746895510</ogrn> <okpo/> <okved>46.43</okved> <okveds/> <authorities/> <documents/> <licenses/> <address> <value>г Москва, ул Щепкина, д 47 стр 1</value> <unrestricted_value>г Москва, Мещанский р-н, ул Щепкина, д 47 стр 1</unrestricted_value> <data> <postal_code>129110</postal_code> <country>Россия</country> <region_fias_id>0c5b2444-70a0-4932-980c-b4dc0d3f02b5</region_fias_id> <region_kladr_id>7700000000000</region_kladr_id> <region_with_type>г Москва</region_with_type> <region_type>г</region_type> <region_type_full>город</region_type_full> <region>Москва</region> <area_fias_id/> <area_kladr_id/> <area_with_type/> <area_type/> <area_type_full/> <area/> <city_fias_id>0c5b2444-70a0-4932-980c-b4dc0d3f02b5</city_fias_id> <city_kladr_id>7700000000000</city_kladr_id> <city_with_type>г Москва</city_with_type> <city_type>г</city_type> <city_type_full>город</city_type_full> <city>Москва</city> <city_area>Центральный</city_area> <city_district_fias_id/> <city_district_kladr_id/> <city_district_with_type>Мещанский р-н</city_district_with_type> <city_district_type>р-н</city_district_type> <city_district_type_full>район</city_district_type_full> <city_district>Мещанский</city_district> <settlement_fias_id/> <settlement_kladr_id/> <settlement_with_type/> <settlement_type/> <settlement_type_full/> <settlement/> <street_fias_id>52b67c53-d0a5-4ad9-b3f1-294c5dd7a41f</street_fias_id> <street_kladr_id>77000000000317100</street_kladr_id> <street_with_type>ул Щепкина</street_with_type> <street_type>ул</street_type> <street_type_full>улица</street_type_full> <street>Щепкина</street> <house_fias_id>b01844e6-103f-4564-9ffe-b444f545398e</house_fias_id> <house_kladr_id>7700000000031710033</house_kladr_id> <house_type>д</house_type> <house_type_full>дом</house_type_full> <house>47</house> <block_type>стр</block_type> <block_type_full>строение</block_type_full> <block>1</block> <flat_type/> <flat_type_full/> <flat/> <flat_area/> <square_meter_price/> <flat_price/> <postal_box/> <fias_id>b01844e6-103f-4564-9ffe-b444f545398e</fias_id> <fias_code>77000000000000031710033</fias_code> <fias_level>8</fias_level> <fias_actuality_state>0</fias_actuality_state> <kladr_id>7700000000031710033</kladr_id> <capital_marker>0</capital_marker> <okato>45286570000</okato> <oktmo>45379000</oktmo> <tax_office>7702</tax_office> <tax_office_legal>7702</tax_office_legal> <timezone/> <geo_lat>55.7813958</geo_lat> <geo_lon>37.6286469</geo_lon> <beltway_hit/> <beltway_distance/> <metro/> <qc_geo>0</qc_geo> <qc_complete/> <qc_house/> <history_values/> <unparsed_parts/> <source>129110, ГОРОД МОСКВА, УЛИЦА ЩЕПКИНА, 47, СТР.1</source> <qc/> </data> </address> <phones/> <emails/> <ogrn_date>1217462400000</ogrn_date> <okved_type>2014</okved_type> </data> </suggestions> </SuggestResponse>
Подсказки на Python
Получаем данные юридического лица по ИНН:
import json import requests API_KEY = 'API_KEY' BASE_URL = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/' def suggest(query, resource): url = BASE_URL + resource headers = { 'Authorization': 'Token ' + API_KEY, 'Content-Type': 'application/json' 'Accept': 'application/json', } data = { 'query': query } res = requests.post(url, data=json.dumps(data), headers=headers) return res.json() # получаем данные юр.лица по ИНН data = suggest('7702680818', 'party') # название компании print('Название: ' + data['suggestions'][0]['value']) # КПП print('КПП: ' + data['suggestions'][0]['data']['kpp']) # ОГРН print('ОГРН: ' + data['suggestions'][0]['data']['ogrn']) # ген.директор print('Ген.директор: ' + data['suggestions'][0]['data']['management']['name']) # юр.адрес print('Юр.адрес: ' + data['suggestions'][0]['data']['address']['value'])
Подсказки на JavaScript
Подсказки при вводе с использованием jQuery-плагина от DaData:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Сервис DADATA.RU — быстрый ввод контактных данных</title> <link href="style.css" type="text/css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/suggestions-jquery@18.6.0/dist/css/suggestions.min.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/suggestions-jquery@18.6.0/dist/js/jquery.suggestions.min.js"></script> <script type="text/javascript" src="script.js"></script> </head> <body> <form> <div> <span>Наименование</span> <span><input type="text" name="name" value="" /></span> </div> <div> <span>Ген.директор</span> <span><input type="text" name="ceo" value="" /></span> </div> <div> <span>ИНН</span> <span><input type="text" name="inn" value="" /></span> </div> <div> <span>ОГРН</span> <span><input type="text" name="ogrn" value="" /></span> </div> <div> <span>Юр.адрес</span> <span><input type="text" name="address" value="" /></span> </div> <input type="submit" name="submit" value="Отправить" /> <input type="reset" name="reset" value="Сбросить" /> </form> </body> </html>
$(document).ready(function() { /* * Подсказки для поля Наименование */ $('input[name="name"]').suggestions({ // поиск по наименованию компании token: 'API_KEY', type: 'PARTY', count: 5, mobileWidth: 360, // вызывается, когда пользователь выбирает одну из подсказок onSelect: function(suggestion) { // заполнем поле Ген.директор if (suggestion.data.type === 'LEGAL') { // юридическое лицо $('input[name="ceo"]').val(suggestion.data.management.name); } if (suggestion.data.type === 'INDIVIDUAL') { // индивидуальный предриниметель $('input[name="ceo"]').val(suggestion.data.name.full); } // заполнем поле ИНН $('input[name="inn"]').val(suggestion.data.inn); // заполнем поле ОГРН $('input[name="ogrn"]').val(suggestion.data.ogrn); // заполнем поле юр.адрес $('input[name="address"]').val(suggestion.data.address.value); } }); /* * Подсказки для поля Ген.директор */ $('input[name="ceo"]').suggestions({ // поиск по ФИО ген.директора token: 'API_KEY', type: 'PARTY', count: 5, mobileWidth: 360, // вызывается, когда пользователь выбирает одну из подсказок onSelect: function(suggestion) { // заполнем поле Наименование $('input[name="name"]').val(suggestion.value); // заполнем поле Ген.директор if (suggestion.data.type === 'LEGAL') { // юридическое лицо $(this).val(suggestion.data.management.name); } if (suggestion.data.type === 'INDIVIDUAL') { // индивидуальный предриниматель $(this).val(suggestion.data.name.full); } // заполнем поле ИНН $('input[name="inn"]').val(suggestion.data.inn); // заполнем поле ОГРН $('input[name="ogrn"]').val(suggestion.data.ogrn); // заполнем поле юр.адрес $('input[name="address"]').val(suggestion.data.address.value); } }); /* * Подсказки для поля ИНН */ $('input[name="inn"]').suggestions({ // поиск по ИНН token: 'API_KEY', type: 'PARTY', count: 5, mobileWidth: 360, // вызывается, когда пользователь выбирает одну из подсказок onSelect: function(suggestion) { // заполнем поле Наименование $('input[name="name"]').val(suggestion.value); // заполнем поле Ген.директор if (suggestion.data.type === 'LEGAL') { // юридическое лицо $('input[name="ceo"]').val(suggestion.data.management.name); } if (suggestion.data.type === 'INDIVIDUAL') { // индивидуальный предриниматель $('input[name="ceo"]').val(suggestion.data.name.full); } // заполняем поле ИНН $(this).val(suggestion.data.inn); // заполнем поле ОГРН $('input[name="ogrn"]').val(suggestion.data.ogrn); // заполнем поле юр.адрес $('input[name="address"]').val(suggestion.data.address.value); } }); /* * Подсказки для поля ОГРН */ $('input[name="ogrn"]').suggestions({ // поиск по ОГРН token: 'API_KEY', type: 'PARTY', count: 5, mobileWidth: 360, // вызывается, когда пользователь выбирает одну из подсказок onSelect: function(suggestion) { // заполнем поле Наименование $('input[name="name"]').val(suggestion.value); // заполнем поле Ген.директор if (suggestion.data.type === 'LEGAL') { // юридическое лицо $('input[name="ceo"]').val(suggestion.data.management.name); } if (suggestion.data.type === 'INDIVIDUAL') { // индивидуальный предриниматель $('input[name="ceo"]').val(suggestion.data.name.full); } // заполнем поле ИНН $('input[name="inn"]').val(suggestion.data.inn); // заполнем поле ОГРН $(this).val(suggestion.data.ogrn); // заполнем поле юр.адрес $('input[name="address"]').val(suggestion.data.address.value); } }); });
body {
margin: 10px;
padding: 10px;
font: 14px/1.2 Arial, sans-serif;
}
form {
width: 50%;
}
form > div {
margin-bottom: 10px;
}
form > div > span {
display: block;
}
form > div > span > input[type="text"] {
width: 100%;
padding: 5px;
box-sizing: border-box;
}
form > input[type="submit"], form > input[type="reset"] {
width: 30%;
padding: 5px 15px;
}
Стандартизация
Стандартизация на PHP
Приводим в порядок данные — ФИО, номер телефона и адрес:
<?php class Dadata { public function __construct($apiKey, $secretKey) { $this->apiKey = $apiKey; $this->secretKey = $secretKey; } public function clean($type, $data) { $requestData = array($data); return $this->executeRequest('https://dadata.ru/api/v2/clean/' . $type, $requestData); } public function cleanRecord($structure, $record) { $requestData = array( 'structure' => $structure, 'data' => array($record) ); return $this->executeRequest('https://dadata.ru/api/v2/clean', $requestData); } private function prepareRequest($curl, $data) { // отключить проверку SSL-сертификата // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // или скачать сертификат здесь https://curl.haxx.se/docs/caextract.html curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__).'/cacert.pem'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json', 'Authorization: Token ' . $this->apiKey, 'X-Secret: ' . $this->secretKey, )); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); } private function executeRequest($url, $data) { $result = false; if ($curl = curl_init($url)) { $this->prepareRequest($curl, $data); $result = curl_exec($curl); if (curl_errno($curl)) { echo 'Error: ' . curl_error($curl); } $result = json_decode($result, true); curl_close($curl); } return $result; } } $apiKey = 'API_KEY'; $secretKey = 'SECRET_KEY'; $dadata = new Dadata($apiKey, $secretKey); // Стандартизация одного значения конкретного типа $result = $dadata->clean('name', 'Сергей Владимерович Иванов'); print_r($result); // Стандартизация нескольких значений одного типа; допускается // не более 1 ФИО, 3 адресов, 3 телефонов, 3 email $structure = array('PHONE', 'ADDRESS'); $record = array('8 916 823 3454', 'Москва, 3 пр. Перова поля, д. 8 стр.11'); $result = $dadata->cleanRecord($structure, $record); print_r($result);
Array
(
[0] => Array
(
[source] => Сергей Владимерович Иванов
[result] => Иванов Сергей Владимирович
[result_genitive] => Иванова Сергея Владимировича
[result_dative] => Иванову Сергею Владимировичу
[result_ablative] => Ивановым Сергеем Владимировичем
[surname] => Иванов
[name] => Сергей
[patronymic] => Владимирович
[gender] => М
[qc] => 1
)
)
Array
(
[structure] => Array
(
[0] => PHONE
[1] => ADDRESS
)
[data] => Array
(
[0] => Array
(
[0] => Array
(
[source] => 8 916 823 3454
[type] => Мобильный
[phone] => +7 916 823-34-54
[country_code] => 7
[city_code] => 916
[number] => 8233454
[extension] =>
[provider] => ПАО "Мобильные ТелеСистемы"
[region] => Москва и Московская область
[timezone] => UTC+3
[qc_conflict] => 0
[qc] => 0
)
[1] => Array
(
[source] => Москва, 3 пр. Перова поля, д. 8 стр.11
[result] => г Москва, проезд Перова Поля 3-й, д 8 стр 11
[postal_code] => 111141
[country] => Россия
[region_fias_id] => 0c5b2444-70a0-4932-980c-b4dc0d3f02b5
[region_kladr_id] => 7700000000000
[region_with_type] => г Москва
[region_type] => г
[region_type_full] => город
[region] => Москва
[area_fias_id] =>
[area_kladr_id] =>
[area_with_type] =>
[area_type] =>
[area_type_full] =>
[area] =>
[city_fias_id] =>
[city_kladr_id] =>
[city_with_type] =>
[city_type] =>
[city_type_full] =>
[city] =>
[city_area] => Восточный
[city_district_fias_id] =>
[city_district_kladr_id] =>
[city_district_with_type] => р-н Перово
[city_district_type] => р-н
[city_district_type_full] => район
[city_district] => Перово
[settlement_fias_id] =>
[settlement_kladr_id] =>
[settlement_with_type] =>
[settlement_type] =>
[settlement_type_full] =>
[settlement] =>
[street_fias_id] => 72a95d02-f1fd-474e-a566-1c96c207526d
[street_kladr_id] => 77000000000042900
[street_with_type] => проезд Перова Поля 3-й
[street_type] => проезд
[street_type_full] => проезд
[street] => Перова Поля 3-й
[house_fias_id] => b6305b5f-e327-43df-8218-838fdfb1756b
[house_kladr_id] => 7700000000004290036
[house_type] => д
[house_type_full] => дом
[house] => 8
[block_type] => стр
[block_type_full] => строение
[block] => 11
[flat_type] =>
[flat_type_full] =>
[flat] =>
[flat_area] =>
[square_meter_price] =>
[flat_price] =>
[postal_box] =>
[fias_id] => b6305b5f-e327-43df-8218-838fdfb1756b
[fias_code] => 77000000000000004290036
[fias_level] => 8
[fias_actuality_state] => 0
[kladr_id] => 7700000000004290036
[capital_marker] => 0
[okato] => 45263583000
[oktmo] => 45312000
[tax_office] => 7720
[tax_office_legal] => 7720
[timezone] => UTC+3
[geo_lat] => 55.7525456
[geo_lon] => 37.7718395
[beltway_hit] => IN_MKAD
[beltway_distance] =>
[qc_geo] => 0
[qc_complete] => 5
[qc_house] => 2
[qc] => 0
[unparsed_parts] =>
[metro] => Array
(
[0] => Array
(
[distance] => 0.8
[line] => Калининско-Солнцевская
[name] => Перово
)
[1] => Array
(
[distance] => 1.4
[line] => Калининско-Солнцевская
[name] => Шоссе Энтузиастов
)
[2] => Array
(
[distance] => 1.6
[line] => МЦК
[name] => Шоссе Энтузиастов
)
)
)
)
)
)
Стандартизация на Python
Приводим в порядок данные — ФИО, номер телефона и адрес:
import json import requests API_KEY = 'API_KEY' SECRET_KEY = 'SECRET_KEY' BASE_URL = 'https://dadata.ru/api/v2/clean' def clean(dataType, dataString): url = BASE_URL + '/' + dataType headers = { 'Authorization': 'Token ' + API_KEY, 'X-Secret': SECRET_KEY, 'Content-Type': 'application/json', 'Accept': 'application/json' } data = [dataString] res = requests.post(url, data=json.dumps(data), headers=headers) return res.json() def cleanRecord(structure, record): url = BASE_URL headers = { 'Authorization': 'Token ' + API_KEY, 'X-Secret': SECRET_KEY, 'Content-Type': 'application/json', 'Accept': 'application/json' } data = {'structure': structure, 'data': [record]} res = requests.post(url, data=json.dumps(data), headers=headers) return res.json() # Приводим в порядок ФИО result = clean('name', 'Сергей Владимерович Иванов') print(result) # Стандартизация нескольких значений одного типа; допускается # не более 1 ФИО, 3 адресов, 3 телефонов, 3 email structure = ['PHONE', 'ADDRESS'] record = ['8 916 823 3454', 'Москва, 3 пр. Перова поля, д. 8 стр.11'] result = cleanRecord(structure, record) print(result)
[ { "source":"Сергей Владимерович Иванов", "result":"Иванов Сергей Владимирович", "result_genitive":"Иванова Сергея Владимировича", "result_dative":"Иванову Сергею Владимировичу", "result_ablative":"Ивановым Сергеем Владимировичем", "surname":"Иванов", "name":"Сергей", "patronymic":"Владимирович", "gender":"М", "qc":1 } ]
{ "structure": ["PHONE","ADDRESS"], "data": [ [ { "source":"8 916 823 3454", "type":"Мобильный", "phone":"+7 916 823-34-54", "country_code":"7", "city_code":"916", "number":"8233454", "extension":null, "provider":"ПАО \"Мобильные ТелеСистемы\"", "region":"Москва и Московская область", "timezone":"UTC+3", "qc_conflict":0, "qc":0 }, { "source":"Москва, 3 пр. Перова поля, д. 8 стр.11", "result":"г Москва, проезд Перова Поля 3-й, д 8 стр 11", "postal_code":"111141", "country":"Россия", "region_fias_id":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5", "region_kladr_id":"7700000000000", "region_with_type":"г Москва", "region_type":"г", "region_type_full":"город", "region":"Москва", "area_fias_id":null, "area_kladr_id":null, "area_with_type":null, "area_type":null, "area_type_full":null, "area":null, "city_fias_id":null, "city_kladr_id":null, "city_with_type":null, "city_type":null, "city_type_full":null, "city":null, "city_area":"Восточный", "city_district_fias_id":null, "city_district_kladr_id":null, "city_district_with_type":"р-н Перово", "city_district_type":"р-н", "city_district_type_full":"район", "city_district":"Перово", "settlement_fias_id":null, "settlement_kladr_id":null, "settlement_with_type":null, "settlement_type":null, "settlement_type_full":null, "settlement":null, "street_fias_id":"72a95d02-f1fd-474e-a566-1c96c207526d", "street_kladr_id":"77000000000042900", "street_with_type":"проезд Перова Поля 3-й", "street_type":"проезд", "street_type_full":"проезд", "street":"Перова Поля 3-й", "house_fias_id":"b6305b5f-e327-43df-8218-838fdfb1756b", "house_kladr_id":"7700000000004290036", "house_type":"д", "house_type_full":"дом", "house":"8", "block_type":"стр", "block_type_full":"строение", "block":"11", "flat_type":null, "flat_type_full":null, "flat":null, "flat_area":null, "square_meter_price":null, "flat_price":null, "postal_box":null, "fias_id":"b6305b5f-e327-43df-8218-838fdfb1756b", "fias_code":"77000000000000004290036", "fias_level":"8", "fias_actuality_state":"0", "kladr_id":"7700000000004290036", "capital_marker":"0", "okato":"45263583000", "oktmo":"45312000", "tax_office":"7720", "tax_office_legal":"7720", "timezone":"UTC+3", "geo_lat":"55.7525456", "geo_lon":"37.7718395", "beltway_hit":"IN_MKAD", "beltway_distance":null, "qc_geo":0, "qc_complete":5, "qc_house":2, "qc":0, "unparsed_parts":null, "metro": [ {"distance":0.8,"line":"Калининско-Солнцевская","name":"Перово"}, {"distance":1.4,"line":"Калининско-Солнцевская","name":"Шоссе Энтузиастов"}, {"distance":1.6,"line":"МЦК","name":"Шоссе Энтузиастов"} ] } ] ] }
- Магазин на Laravel 7, часть 19. Панель управления, добавляем редактор для страниц сайта
- Yii2. Отправка данных AJAX
- Работа с объектом FormData
- Загрузка файла на сервер без использования формы
- Отправка данных из скрипта методом POST
- React и Redux вместе. Часть 7 из 7
- React и Redux вместе. Часть 6 из 7
Поиск: JSON • JavaScript • PHP • Python • Web-разработка • jQuery • API • Dadata


