Encontre geolocalização usando endereço IP gratuitamente em PHP
Encontrar a geolocalização e as informações do país de um usuário é necessário para a maioria dos sites. Provavelmente, você precisa mostrar conteúdo diferente com base no país de um usuário, mostrar preços diferentes de acordo com os códigos de moeda do país, etc. Nesses cenários, você precisa encontrar a geolocalização de um usuário e servir o conteúdo de acordo.
Neste artigo, mostrarei como encontrar geolocalização usando o endereço IP de um usuário em PHP. Vamos usar o serviço IP Geolocation API, que é totalmente gratuito.
Obtenha geolocalização usando endereço IP
Em PHP, podemos usar o serviço de ‘IP Geolocation API’ por meio de cURL e Guzzle. Ambos são populares para chamar serviços de API externos e obter a resposta deles. Dependendo do fluxo do seu projeto, você pode usar cURL ou Guzzle. Em ambos os casos, primeiro precisamos obter o endereço IP do usuário. Portanto, escreva o método abaixo que retornará um endereço IP.
<?php
// get user's IP address
function getUserIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Usando cURL
O cURL vem por padrão com a instalação do PHP. Não há necessidade de instalar nenhum pacote separadamente. Você só precisa se certificar de que está habilitado em seu servidor antes de usá-lo.
Por meio do cURL, faremos uma chamada para o endpoint de ‘IP Geolocation API’ fornecendo o endereço IP do usuário e imprimiremos a resposta.
<?php
$ip_address = getUserIpAddr();
$url = "https://api.ipgeolocationapi.com/geolocate/$ip_address";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec($ch);
$arr_result = json_decode($response);
print_r($arr_result);
Você obterá a saída no formato JSON semelhante a abaixo.
{
"continent": "Asia",
"address_format": "{{recipient}}n{{street}}n{{region}}n{{city}} {{postalcode}}n{{country}}",
"alpha2": "IN",
"alpha3": "IND",
"country_code": "91",
"international_prefix": "00",
"ioc": "IND",
"gec": "IN",
"name": "India",
"national_destination_code_lengths": [
2
],
"national_number_lengths": [
10
],
"national_prefix": "0",
"number": "356",
"region": "Asia",
"subregion": "Southern Asia",
"world_region": "APAC",
"un_locode": "IN",
"nationality": "Indian",
"postal_code": true,
"unofficial_names": [
"India",
"Indien",
"Inde",
"インド"
],
"languages_official": [
"hi",
"en"
],
"languages_spoken": [
"hi",
"en"
],
"geo": {
"latitude": 20.593684,
"latitude_dec": "23.4060115814209",
"longitude": 78.96288,
"longitude_dec": "79.45809173583984",
"max_latitude": 35.5087008,
"max_longitude": 97.3953587,
"min_latitude": 6.4626999,
"min_longitude": 68.1097,
"bounds": {
"northeast": {
"lat": 35.5087008,
"lng": 97.3953587
},
"southwest": {
"lat": 6.4626999,
"lng": 68.1097
}
}
},
"currency_code": "INR",
"start_of_week": "monday"
}
Usando Guzzle
Guzzle é um cliente PHP HTTP para enviar requisições HTTP. É uma alternativa ao cURL. Ele fornece muito código limpo e uma melhor experiência para os desenvolvedores.
Primeiramente, você precisa instalar o Guzzle usando o Composer executando o comando:
composer require guzzlehttp/guzzle
Em seguida, escreva o código abaixo que chama a API por meio do Guzzle.
<?php
require_once "vendor/autoload.php";
use GuzzleHttpClient;
$ip_address = getUserIpAddr();
$client = new Client();
$response = $client->request('GET', 'https://api.ipgeolocationapi.com/geolocate/'.$ip_address);
if($response->getStatusCode() == 200) {
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);
}
É assim que obtemos a geolocalização usando o endereço IP em PHP. Por favor, compartilhe suas idéias ou sugestões na seção de comentários abaixo.
Artigos relacionados
- Biblioteca Laravel Geoip – Descubra Geolocalização Usando Endereço IP
- Como obter geolocalização de IP em PHP
- Como usar o Guzzle – um cliente PHP HTTP para enviar solicitações HTTP