Получить город по IP бесплатно, PHP. geo city free
Работает не везде, если IP залочили, то все, только прокси или другие варианты. Вписываем за место test.ru ваш сайт, так как они могут залочить, если нет обратной связи на проект с которого дергается инфа
код не проверял у меня залочка, писан по простому
<?php function getcity($ip) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "https://tools.keycdn.com/geo.json?host={$ip}"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_USERAGENT, "keycdn-tools:https://test.ru"); curl_setopt($curl, CURLOPT_REFERER, "https://test.ru"); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); $json = json_decode($resp, true); $info = ['city'=>'', 'country'=>'']; if (isset($json['data']['geo']['country_name'])) $info['country'] = $json['data']['geo']['country_name']; if (isset($json['data']['geo']['city'])) $info['city'] = $json['data']['geo']['city']; return $info; } var_dump(getcity('46.32.87.209'));
curl -H "User-Agent: keycdn-tools:http://46.32.87.209" "https://tools.keycdn.com/geo.json?host=46.32.87.209"
{"status":"success","description":"Data successfully received.","data":{"geo":{"host":"46.32.87.209","ip":"46.32.87.209","rdns":"46.32.87.209","asn":48416,"isp":"Information Network, LLC","country_name":"Russia","country_code":"RU","region_name":"St.-Petersburg","region_code":"SPE","city":"St Petersburg","postal_code":"190000","continent_name":"Europe","continent_code":"EU","latitude":59.8983,"longitude":30.2618,"metro_code":null,"timezone":"Europe\/Moscow","datetime":"2022-08-05 01:03:06"}}}
Авторы не написали информацию про лимиты в сутки и в месяц, возможно нет, что хочется надеяться.
https://geolocation-db.com/jsonp/46.32.87.209
или 50к в месяц https://ipinfo.io/pricing бесплатно.
function getcity2($ip) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "https://geolocation-db.com/json/{$ip}"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"); curl_setopt($curl, CURLOPT_REFERER, "http://{$ip}"); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); $json = json_decode($resp, true); $info = ['city'=>'', 'country'=>'']; if (isset($json['country_name'])) $info['country'] = $json['country_name']; if (isset($json['city'])) $info['city'] = $json['city']; return $info; } var_dump(getcity2('46.32.87.209'));