Сервис 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