Вчера я начал писать несколько парсеров на Node.js, чтобы собрать данные для моего личного проекта (подождите).

Одна из вещей, с которыми мне пришлось столкнуться, это как преобразовать адреса в геолокацию (в основном, широту и долготу).

Итак, я начал делать то, что мы, как разработчики Javascript, делаем лучше всего:

Хм… для этого должен быть пакет.

И, конечно же, есть: https://www.npmjs.com/package/node-geocoder

И использовать его довольно просто:

Но, поскольку мы используем Google в качестве провайдера, конечно, все это не бесплатно 😅

Я проводил много тестов и запускал несколько тысяч запросов, потому что в основном я просматривал множество источников, а также проверял эти результаты.

Google взимает с вас 5 долларов США за каждую 1000 запросов к их API геокодирования.

Итак, я начал искать альтернативы и нашел это замечательное приложение от OpenStreetMaps под названием Nominatim. (Для получения дополнительной информации нажмите здесь)

И он действительно работает очень хорошо и очень быстро, поэтому я начал искать их API и нашел эту действительно хорошо подготовленную документацию о том, как использовать конечную точку поиска (это было практически единственное, что мне было нужно).

Итак, я начал настраивать и выпустил этот очень маленький скрипт, который действительно делает именно то, что я хочу, и получилось довольно просто!

Поскольку я запускал его на серверах узлов, node-fetch - это мой способ по умолчанию инициировать HTTP-вызовы. Если вы запускаете его в браузере, просто убедитесь, что используете собственный fetch метод. (или как угодно еще)

Этот небольшой модуль получился довольно простым и легко может быть реализован на любом языке.

Конечно, есть некоторые ограничения. Этот API является общедоступным, но создан в основном для поддержки Open Street Maps, поэтому обязательно следуйте их политике использования.

И небольшая изюминка:

Модуль node-geocoder также предлагает поддержку Nominatim API.

Я просто выбрал свою собственную реализацию, потому что это было буквально все, что мне было нужно.

Из этого можно извлечь еще один урок: иногда вам может не полностью понадобиться модуль, даже если он предлагает вам то, что вы хотите.

Вы хотели банан, но получили гориллу, держащую банан и целые джунгли.

Если вам это понравилось, не забудьте оставить несколько хлопков (правда, вы можете хлопать больше, чем разовый товарищ!)

Не стесняйтесь пинговать меня на Github или Twitter, если вы хотите поговорить об этом подробнее.

И обязательно наслаждайтесь своим днем, ура!