Сервис DaData: подсказки и стандартизация

30.07.2018

Теги: APICURLJavaScriptjQueryJSONPHPPOSTPythonWeb-разработка

Сервис 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":"Шоссе Энтузиастов"}
                        ]
                }
            ]
        ]
}

Поиск: JSON • JavaScript • PHP • Python • Web-разработка • jQuery • API • Dadata

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.