Документация
Мы храним базу ФИАС в собственном формате, оптимизированным для быстрого поиска. Для бесперебойной работы используем несколько серверов в облаке Mail.ru.
Токен
После регистрации в личном кабинете вы увидете свой уникальный токен.
Платные сервера
Всегда необходимо указывать свой токен в параметре token.
Бесплатные сервера
Токен указывать необязательно.
Интеграция с сайтом
Документация о настройке плагина находится на его github странице.
По умолчанию плагин настроен на работу с бесплатным сервером. Для работы с платным сервером добавьте свой токен и укажите URL платного сервера следующим образом:
Подключение к серверу (API)
Доступ к API является публичным, без каких-либо ограничений. Бесплатные сервера предоставляются как есть, мы не гарантируем их работоспособность и скорость ответа. Бесплатный API отлично подходит, например, для тестирования сервиса, личного использования, домашних страниц. Доступ к платным серверам возможен только при указании вашего токена, который мы активируем после оплаты.
Параметры запроса
- Адрес страницы для запроса к платным серверам:
Плагины
Для облегчнения интеграции сторонними разработчиками созданы плагины под разные плаформы. Обратите внимание, они могут быть платными.
Источник
Kladr api ru не работает
Плагин для автодополнения полей адреса при вводе.
В качестве источника данных используется сервис [kladr-api.ru] 1.
- $.kladr — ( статичный объект ) предоставляет методы и свойства для работы с сервисом.
- $(‘input’).kladr — ( плагин jQuery ) плагин для автодополнения адреса.
- $(‘input’).kladrZip — ( плагин jQuery ) плагин для полей с почтовым индексом.
Свойства объекта $.kladr
- url — url сервиса, по умолчанию [http://kladr-api.ru/api.php] 2.
- type — перечисление используемых типов объектов. Список значений: region (область, регион), district (район), city (населённый пункт), street (улица), building (строение).
- typeCode — перечисление используемых типов населённых пунктов. Список значений: city (город), settlement (посёлок), village (деревня, село).
- validate= function (query) <> — выполняет проверку корректности объекта запроса.
- api= function (query, callback) <> — непосредственно выполняет запрос к сервису. В качестве параметров принимает объект запроса и функцию, которой будет передан ответ сервиса.
- check= function (query, callback) <> — проверяет существование объекта. В качестве параметров принимает объект запроса и функцию, которой будет передан объект (если он существует) либо false.
- setValues= function (values, selector) <> — устанавливает значения для полей, к которым подключён плагин $(‘input’).kladr. В качестве параметра values принимает массив объектов КЛАДР или объект вида <'тип объекта' =>название или id объекта>. Второй параметр аналогичен параметру функции getInputs.
- setDefault= function (param1, param2) <> — устанавливает значения по умолчанию для параметров плагина $(‘input’).kladr. В качестве параметров принимает аналогично плагину либо объект со списком изменяемых параметров, либо пару «параметр — новое значение параметра».
- getDefault= function (param) <> — возвращает значение по умолчанию для параметра плагина $(‘input’).kladr. В качестве параметра принимает название параметра плагина.
- getInputs= function (selector) <> — возвращает jQuery коллекцию полей ввода, к которым был подключён плагин $(‘input’).kladr. В качестве параметра принимает селектор, DOM элемент или же объект jQuery, в котором будет выполнен поиск соответствующих полей, по умолчанию body.
- buildAddress= function (objs) <> — строит строку адреса на основании массива объектов КЛАДР.
- getAddress= function (selector, build) <> — возвращает строку адреса на основании полей ввода, к которым был подключён плагин $(‘input’).kladr. Первый параметр аналогичен параметру функции getInputs. В качестве второго параметра принимает функцию, которой будет собираться строка адреса, по умолчанию buildAddress.
Параметры плагина $(‘input’).kladr
- token — токен для доступа к сервису, по умолчанию null.
- key — ключ для доступа к сервису, по умолчанию null.
- type — тип подставляемых объектов, по умолчанию null.
- typeCode — тип подставляемых населённых пунктов, по умолчанию null. Может быть использован только если type == ‘city’.
- parentType — тип родительского объекта, по умолчанию null.
- parentId — идентификатор родительского объекта, по умолчанию null.
- limit — количество отображаемых в выпадающем списке объектов, по умолчанию 10.
- oneString — включить ввод адреса одной строкой, по умолчанию false.
- withParents — получить объект вместе с родителями, по умолчанию false.
- parentInput — селектор, DOM элемент или же объект jQuery, в котором находится поле ввода родительского объекта, по умолчанию null.
- verify — проверять введённые данные, по умолчанию false.
- spinner — отображать ajax-крутилку, по умолчанию true.
- current — текущий, выбранный объект КЛАДР, только для чтения.
- controller — контроллер плагина, только для чтения.
Методы плагина $(‘input’).kladr
- source= function (query) — функция для получения списка объектов отображаемых при автодополнении. В качестве параметра принимает объекта запроса. По умолчанию запрашивает данные у сервиса [kladr-api.ru] 1. Может быть переопределена для получения объектов из другого источника.
- labelFormat= function (obj, query) — функция для форматирования значений в списке. В качестве параметров принимает obj – объект КЛАДР, query – объект запроса.
- valueFormat= function (obj, query) – функция для форматирования подставляемых в поле ввода значений. В качестве параметров принимает obj – объект КЛАДР, query – объект запроса.
- showSpinner= function ($spinner) <> — функция, выводящая ajax-крутилку. В качестве параметра принимает jQuery объект ajax-крутилки.
- hideSpinner= function ($spinner) <> — функция, скрывающая ajax-крутилку. В качестве параметра принимает jQuery объект ajax-крутилки.
События плагина $(‘input’).kladr
Во все события в качестве контекста (this) передаётся текущее поле ввода.
В обработчиках событий . Before (openBefore, closeBefore) объявленных как параметр плагина ( $(»).kladr(
- openBefore= function () <> — возникает перед открытием списка объектов. Доступно как событие kladr_open_before поля ввода.
- open= function () <> — открыт список объектов. Доступно как событие kladr_open поля ввода.
- closeBefore= function () <> — возникает перед закрытием списка объектов. Доступно как событие kladr_close_before поля ввода.
- close= function () <> — закрыт список объектов. Доступно как событие kladr_close поля ввода.
- sendBefore= function (query) <> — возникает перед отправкой запроса к сервису. В параметре передаётся объект запроса. Доступно как событие kladr_send_before поля ввода.
- send= function () <> — отправлен запрос к сервису. Доступно как событие kladr_send поля ввода.
- receive= function () <> — получен ответ от сервиса. Доступно как событие kladr_receive поля ввода.
- selectBefore= function () <> — возникает перед изменением текущего объекта. Доступно как событие kladr_select_before поля ввода.
- select= function (obj) <> — выбран объект в списке. В параметре передаётся текущий, выбранный объект КЛАДР. Доступно как событие kladr_select поля ввода.
- checkBefore= function () <> — возникает перед проверкой введённых пользователем данных. Вызывается только если параметр verify = true. Доступно как событие kladr_check_before поля ввода.
- check= function (obj) <> — проверен введённый пользователем объект. Вызывается только если параметр verify = true. В параметре передаётся текущий объект КЛАДР. Доступно как событие kladr_check поля ввода.
- change= function (obj) <> — изменился текущий объект (current). В параметре передаётся текущий объект КЛАДР. Доступно как событие kladr_change поля ввода.
Методы контроллера плагина $(‘input’).kladr
- setValueByName= function (name) — устанавливает значение поля ввода. В качестве параметра принимает имя объекта.
- setValueById= function (id) — устанавливает значение поля ввода. В качестве параметра принимает id объекта.
- setValueByObject= function (obj) — устанавливает значение поля ввода. В качестве параметра принимает объект КЛАДР.
- setValue= function (value) — устанавливает значение поля ввода. Если в качестве параметра передана строка, значение будет установлено методом setValueByName. Если передано число методом setValueById, если объект методом setValueByObject.
- clear= function () — очищает поле ввода.
Пример использования контроллера можно посмотреть в папке [examples] 3.
Плагин $(‘selector’).kladrZip выполняет проверку введённого пользователем почтового индекса. В случае если введённый индекс соответствует реальному адресу, плагин подставляет объекты этого адреса в другие поля формы (см. пример формы для ввода адреса в папке [examples] 3).
В качестве параметра принимает селектор, DOM элемент или же объект jQuery, в котором будет выполнен поиск соответствующих полей адреса, по умолчанию body.
Структура папок, файлов
- jquery.kladr.min.js — Минимифицированный код плагина
- jquery.kladr.min.css — Минимифицированные стили
- examples — Примеры
- images — Изображения плагина
- kladr — Исходный код плагина
Автодополнение для ввода адреса одной строкой:
Автодополнение городами России:
Изменение подписи при выборе района:
Проверка вводимого пользователем почтового индекса
Более подробные примеры можно найти в папке [examples] 3.
Загрузить последнюю версию плагина себе в проект можно с помощью Bower:
Сборка своей версии плагина
Клонируем репозиторий плагина:
После внесения изменений, выполняем сборку плагина с помощью следующей команды:
Решение распространяется под лицензией «Общественное достояние» (Public Domain) и может быть свободно используемо любым лицом без выплат авторских вознаграждений.
Источник
Сравнение сервисов для автодополнения адресов в форме
На Хабре не раз поднимался вопрос автодополнения адресов в форме (раз, два, три).
Но вот и перед мной появилась задача реализовать такое автодополнение для небольшого интернет магазина. Критерии были такие:
- Автодополнение адресов только Москвы
- Автодополнение адреса одной строкой
- Решение должно быть бесплатно (лимит запросов не менее 1000 в сутки)
- Возможность подключить без дополнительных JS библиотек. (Я использую AngularJSBootstrap-UI, в котором есть директива Typeahead, реализующая автодополнение формы)
- Стопроцентный uptime не обязателен
Но какой источник данных выбрать? Я выбрал целых четыре, и решил их сравнить: в одном углу ринга заморские Google Geocode и Google Autococomplete, а в другом отечественные КЛАДР в облаке и DaData подсказки.
DISCLAIMER: Автор никак не причастен к разработчикам ни одного из представленных сервисов.
Google Geocode (Google Maps API)
В примерах к плагину Typeahead в документации к AngularJS Boostrap UI использован именно Google Geocode для автодополнения адреса. Так почему бы не попробовать, если готовый код уже есть?
Делаем get запрос к адресу http://maps.googleapis.com/maps/api/geocode/json с параметрами
В ответ получаем json, парсим его, и вроде всё неплохо. Вот только нам надо ограничить область поиска только Москвой. Добавляем:
к параметрам и получаем интересное поведение:
Какую ахинею не ввёл бы пользователь, Google предложит «Москва, Россия». К тому же, название улицы он предлагает только после ввода третьей-четвертой буквы, а до этого все те же «Москва, Россия».
Можно ограничить результаты с помощью параметра ‘bounds’ (координаты юго-западного и северо-восточного угла рамки, внутри которой производить геокодирование), но это нестрогое ограничение, поэтому результаты будут появляться и из других областей.
Конечно, не стоит ожидать чудес от сервиса, который вообще не предназначен для автодополнения адреса, но все же резюмирую:
Надежный источник данных
Удобный способ запроса/доставки данных (запрос обычным GETом, обратно — JSON)
Возможно автодополнение одной строкой и даже разбивка полученных данных по компонентам (Страна, регион, город, улица, дом)
Тяжело ограничить область поиска
Сервис не предназначен для автодополнения
Google Autocomplete (Google Places API)
С Google Autocomplete у меня с самого начала не срослось: если запрашивать информацию обычным GETом, то гугловский сервер отвечает ошибкой CORS (Origin… is not allowed by Access-Control-Allow-Origin), а JSONP они не поддерживают после выхода третьей версией API. Некоторые говорят, что это сделано специально, чтобы в веб-разработке использовали их JS библиотеку. Конечно, можно еще сделать прокси, через который будут проходить данные, но я решил не заморачиваться ради такой мелочи.
Но для объективности сравнения, я все же попробовал Google Autocomplete через JS библиотеку. В итоге:
Надежный источник данных
Возможно автодополнение одной строкой
Легко подключить (если использовать их JS библиотеку)
Невозможно достучаться до API с фронтенда из-за CORS
Нельзя строго ограничить область поиска до одного города (Можно строго ограничить только страну, или нестрого ограничить с помощью параметра ‘bounds’)
КЛАДР в облаке
КЛАДР в облаке — отечественный сервис, который не раз упоминали на хабре.
Лично для меня он оказался неподходящим, т.к. не позволяет производить автодополнение одной строкой. Вы можете искать или регионы, или города, или улицы, или номера домов, но никак не всё это вместе в одной строке. То есть или придется разбивать одну форму на несколько, или искать только по названиям улиц только в Москве.
Мне это не подходит, но сильные и слабые стороны я всё же приведу:
Авторитетный источник данных (КЛАДР)
Постоянные обновления базы данных
Российский разработчик
Хороший API
Открытый исходный код
Невозможно автодополнение одной строкой
DaData подсказки
Я уже отчаялся найти сервис своей мечты и собирался вернуться к Google Geocode, как вспомнил про подсказки сервиса DaData.
Сразу перейду к сравнению:
Возможно автодополнение одной строкой
При начале ввода первых букв улицы, он сразу предлагает и номера домов на этой улице
Российский разработчик
Разбивка полученных данных по компонентам (даже индекс и код КЛАДР и ОКАТО)
Неизвестная база данных
Бесплатным пользователям не гарантируется стопроцентный uptime
Неочевидный формат запроса данных (POST, а не GET)
Скудный API
+ БОНУС: автодополнение еще и имён.
Но как организовать ограничение только по Москве? Я не придумал ничего лучше, как передавать ‘Москва ‘ в начале параметра query. И это работает просто прекрасно:
- При вводе улицы явно не в Москве ничего не находится
В итоге лично я решил остановиться на последнем варианте, заодно и воспользоваться их автодополнением имён. Правда я считаю, что у каждого свои задачи, и для каждой конкретной задачи нужен свой инструмент.
Источник