CoderCastrov logo
CoderCastrov
Парсер

Геокодирование и обратное геокодирование с использованием неофициального публичного API Google Maps

Геокодирование и обратное геокодирование с использованием неофициального публичного API Google Maps
просмотров
3 мин чтение
#Парсер
Table Of Content

    Я знаю, что это неправильно, но я хотел бы поделиться тем, что я сделал, чтобы выяснить их API для геокодирования и обратного геокодирования, перехватывая сетевые вызовы из веб-приложения Google Maps.

    Существует множество случаев, когда мы хотим преобразовать геокодирование (информацию, содержащую широту и долготу) в форматированный адрес и наоборот (обратное геокодирование). Обычные инженеры подписываются на сторонние API, такие как Google Maps API, но они слишком дорогие, когда мы пытаемся декодировать/кодировать тысячи транзакций. Моя внутренняя злоба мгновенно говорит мне: "Эй! Вы можете искать места на веб-сайте Google Maps, указывая им широту и долготу, и вы можете получить широту и долготу, указав им там название места/адрес!", и, не тратя слишком много времени на размышления, я начал исследовать веб-сайт Google Maps и перехватывать их сетевой трафик, просто используя инструмент "Инспектор", и, наконец, нашел то, что искал!

    Я верю, что существует множество инженеров, которые могут испытывать трудности с поиском способа кодирования/декодирования геокодирования (широты/долготы) в форматированный адрес или наоборот, поэтому без колебаний я открыл свой Visual Studio Code и начал писать библиотеку на NodeJS и сделал ее доступной для общественности! Но прежде чем я поделюсь ссылкой на репозиторий, я хотел бы провести вас через процесс того, как я нашел и извлек Google Maps API и сделал его программно доступным.

    Я открыл веб-сайт Google Maps, затем открыл "Инспектор" и перешел на вкладку "Сеть". Там я могу увидеть список сетевого трафика от Google Maps в хронологическом порядке, вот как это выглядит:

    Как видите, есть строка поиска Поиск на Google Картах. Давайте попробуем ввести случайную широту и долготу, в моем случае я попробовал ввести следующую широту и долготу: -6.170131,106.8241607, и вот результат:

    Вы можете увидеть форматированный адрес в результате поиска в боковой панели. Очевидно, эта информация получается из вызовов API, поэтому я вернулся к сетевому трафику на правой панели моего браузера, нажал на кнопку поиска, находящуюся слева от флажка "Сохранять журнал" (Preserve log).

    Я попытался найти Jl. Medan Merdeka Utara No.3 (то, что отображается в результате поиска в левой панели) с предположением, что я смогу найти API, содержащий эту информацию.

    И да! Я нашел API, который возвращает информацию "Jl. Medan Merdeka Utara No.3". Отсюда я знаю, что это API принимает широту и долготу и возвращает форматированный адрес (посмотрите на полный URL API), и, видя тело ответа, нам нужно выполнить некоторую работу по извлечению для разбора форматированного адреса. Я не собираюсь объяснять все детали того, как я разбираю форматированный адрес, потому что вы можете увидеть эту работу разбора в коде, который я поделюсь в этой статье.

    Вы можете выполнить тот же процесс поиска API, который возвращает широту и долготу из форматированного адреса/названия места самостоятельно, и я остановлюсь здесь, так что наслаждайтесь!

    Вот библиотека NodeJS, которую я разработал, чтобы помочь вам кодировать/декодировать геокодирование/геолокацию, просто установите пакеты с помощью NPM или YARN и используйте функции, которые я создал. Полные сведения о том, как использовать библиотеку, можно найти в этом репозитории github.com/aashari/nodejs-geocoding

    P.S. Я бы не рекомендовал этот способ, я бы рекомендовал вам использовать официальное API геокодирования Google Maps, особенно если вы пытаетесь создать что-то коммерческое, этот способ очень плох для этого! Я не рекомендую этот способ для любых случаев использования! Это только для образовательных целей!

    Спасибо! Анди Ашари