Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
В большинстве случаев, в том числе для персонализации, настроек по умолчанию и аналитики, геолокации место на сервере, поскольку ей не нужно никакого участия браузера посетителя и вообще никакого скрипта на стороне клиента.
Независимо от языка вызов один и тот же: обычный HTTP-запрос GET к /v1/ip с ключом в заголовке.
GET /v1/ip?ip=203.0.113.60
X-API-Key: mg_live_examplekey123{
"status": "ok",
"ip": "203.0.113.60",
"version": 4,
"found": true,
"country": "Netherlands",
"country_code": "NL",
"region": "North Holland",
"city": "Amsterdam",
"postcode": "1012",
"lat": 52.3702,
"lon": 4.8952,
"timezone": "Europe/Amsterdam",
"asn": 3344,
"org": "Example ISP"
}Получите собственный адрес посетителя из запроса, обычно из $_SERVER['REMOTE_ADDR'], передайте его в параметре ip и выполните HTTP-запрос тем HTTP-клиентом, который уже используется в вашем PHP-проекте, curl или библиотекой-обёрткой над ним. Поскольку этот сайт сам построен на PHP с серверной отрисовкой и без клиентского JavaScript, этот подход естественно вписывается в обычный процесс отрисовки страницы: данные о местоположении доступны ещё до генерации разметки страницы.
Прочитайте адрес посетителя из объекта входящего запроса, обычно из req.socket.remoteAddress или из заголовка, который устанавливает обратный прокси, например X-Forwarded-For, если такой прокси стоит перед вашим приложением, и выполните тот же GET-запрос выбранным HTTP-клиентом до отрисовки ответа.
Если ваше приложение работает за балансировщиком нагрузки или обратным прокси, адрес, который напрямую видит ваш код, может оказаться адресом самого прокси, а не посетителя. Проверьте заголовок с перенаправленным адресом, который устанавливает ваш прокси, и явно передайте этот адрес в параметре ip, а не полагайтесь на исходный удалённый адрес соединения, иначе вы определите местоположение собственной инфраструктуры, а не посетителя.
Само определение стоит один запрос, откуда бы его ни вызывали: из PHP, из Node или из любого другого серверного языка, поскольку стоимость привязана к запросу, дошедшему до API, а не к тому, что сделало вызов. На любом языке кэшируйте результат на время сессии, чтобы не повторять определение на каждой странице.
Серверная геолокация работает одинаково на любом серверном языке: один HTTP-вызов с адресом посетителя. Все варианты аутентификации описаны в документации по аутентификации, а список полей приведён в документации по определению IPv4.