deimon260993
@deimon260993
Web-программист

Возможно ли сделать поиск региона и города по названию или его части, без заливки базы?

Добрый день, коллеги! Суть задачи: Необходимо сделать регистрацию с привязкой к региону и городу, на текущий момент, только по России, в дальнейшем планируется Европа.
Вопрос вот в чем: Возможно ли реализовать данный функционал без поиска соответствующей базы, ее заливания к себе на сервер и дальнейшего использования? Возможно, есть API где то у яндекса или гугла? Шерстил документацию яндекс API, ничего, что могло бы помочь, не нашел. Возможно кто-то уже сталкивался и сможет помочь, поделиться ссылочкой на документацию или указать направление, в котором можно копать дальше. Буду очень благодарен за любую помощь!
  • Вопрос задан
  • 233 просмотра
Решения вопроса 3
@kostia_dev
Попробуйте API Вконтакте взять
Ответ написан
Посмотрите сервис https://dadata.ru/suggestions/

Выдает подсказки адресов и приводит их в соответствии с ФИАС. Минус в том, что до 10 тыс. запросов в день бесплатно
Ответ написан
@vyrkmod
Пишу на php. И не стыдно.
Я распарсил xml с ФИАС-а. Интересен файл AS_ADDROBJ[что-то там].xml. Код:
$columns = ['formalname', 'shortname', 'aolevel', 'aoguid', 'parentguid', 'livestatus']; // поля подбираем под свою задачу
$xml = new XMLReader(); // SimpleXML не использовать ни в коем случае, он весь файл в оперативу грузит
$pdo = new PDO(/*свои настройки*/);
$q = "INSERT INTO `addrobjects` SET ";
foreach ($columns as $column) {
   $q .= "`$column` = :$column,";
}
$stm = $pdo->prepare(rtrim($q, ','));
$xml->open(__DIR__ . '/addrobjects.xml');
while ($xml->read()) {
   if ($xml->name == 'Object' and $xml->getAttribute("AOLEVEL") == 3 ) { // aolevel обозначает тип объекта, для городов он (ВРОДЕ БЫ) равен 3
      foreach($columns as $column) {
         $stm->bindValue($column, $xml->getAttribute(strtoupper($column)));
      }
      $stm->execute();
   }
}

Мускулю перед этим скармливал
CREATE TABLE `addrobjects` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  `formalname` varchar(120) NOT NULL,
  `shortname` varchar(10) NOT NULL,
  `aolevel` int(1) unsigned NOT NULL,
  `livestatus` int(1) unsigned NOT NULL,
  `aoguid` varchar(36) CHARACTER SET latin1 NOT NULL,
  `parentguid` varchar(36) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  UNIQUE KEY `aoguid` (`aoguid`),
  KEY `parentguid` (`parentguid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

NB: запускать из консоли, у меня один регион выгребался 20+ минут
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы