Quero recuperar informações como a cidade, estado e país de um visitante a partir do endereço IP, para que eu possa personalizar minha página da Web de acordo com a localização. Existe uma maneira boa e confiável de fazer isso em PHP? Estou usando JavaScript para scripts do lado do cliente, PHP para scripts do servidor e MySQL para o banco de dados.
php
geolocation
ip
geoip
Ben Dowling
fonte
fonte
Respostas:
Você pode baixar um banco de dados GeoIP gratuito e pesquisar o endereço IP localmente ou usar um serviço de terceiros e executar uma pesquisa remota. Essa é a opção mais simples, pois não requer configuração, mas introduz latência adicional.
Um serviço de terceiros que você pode usar é o meu, http://ipinfo.io . Eles fornecem nome do host, localização geográfica, proprietário da rede e informações adicionais, por exemplo:
Aqui está um exemplo do PHP:
Você também pode usá-lo no lado do cliente. Aqui está um exemplo simples de jQuery:
fonte
null
o nome da minha cidade. Não é como uma cidade pequena ou algo assim, mas ainda não conseguiu localizá-la. Se não funcionar bem nos EUA, duvido com que frequência também retornará nulo fora dos EUA.Pensei em postar como ninguém parece ter dado informações sobre essa API em particular, mas está retornando exatamente o que estou procurando e você pode fazê-lo retornar em vários formatos
json, xml and csv
.Isso fornecerá todas as coisas que você poderia desejar:
fonte
Um exemplo puro de Javascript, usando os serviços de https://geolocation-db.com. Eles fornecem uma solução JSON e JSONP-callback.
Não é necessário jQuery!
fonte
https://geoilocation-db.com
API?Usando o Google APIS:
fonte
The geolocation functionality in the Loader hasn't been retired, per se. We stopped documenting it several years ago and have recommended the HTML-based solutions due to their improved accuracy, but the functionality itself has not been removed from the Loader at this time.
code.google.com/p/google-ajax-apis/issues/detail?id=586Você precisa usar um serviço externo ... como http://www.hostip.info/, se você pesquisar no Google por "geo-ip", poderá obter mais resultados.
A API do IP do host é baseada em HTTP, para que você possa usá-la em PHP ou JavaScript, dependendo de suas necessidades.
fonte
Eu escrevi um bot usando uma API do ipapi.co , veja como você pode obter a localização de um endereço IP (por exemplo
1.2.3.4
) emphp
:Definir cabeçalho:
Obter resposta JSON
de obter um campo específico (país, fuso horário etc.)
fonte
Esta questão está protegida, o que eu entendo. No entanto, não vejo uma resposta aqui, o que vejo são muitas pessoas mostrando o que surgiram por terem a mesma pergunta.
Atualmente, existem cinco registros regionais da Internet com diferentes graus de funcionalidade que servem como o primeiro ponto de contato em relação à propriedade de IP. O processo está em andamento, e é por isso que os vários serviços aqui funcionam algumas vezes e outras não.
Quem é (obviamente) é um protocolo TCP antigo, no entanto - a maneira como funcionou originalmente foi pela conexão à porta 43, o que torna problemático obtê-lo roteado através de conexões alugadas, através de firewalls ... etc.
Neste momento - a maioria dos Who Is é feita via HTTP RESTful e ARIN, RIPE e APNIC possuem serviços RESTful que funcionam. O LACNIC retorna um 503 e o AfriNIC aparentemente não possui essa API. (Todos têm serviços online, no entanto.)
Isso fará com que você - o endereço do proprietário registrado do IP, mas - não a localização do seu cliente - você deve obtê-lo e também - você precise solicitá-lo. Além disso, os proxies são a menor das suas preocupações ao validar o IP que você acha que é o originador.
As pessoas não apreciam a noção de que estão sendo rastreadas, então - meus pensamentos são - recebam isso diretamente do seu cliente e com a permissão delas e esperam muito se recusar.
fonte
Veja a API do hostip.info - ela fornece muitas informações.
Exemplo em PHP:
Se você confia no hostip.info, parece ser uma API muito útil.
fonte
O serviço na resposta de Ben Dowling mudou, agora é mais simples. Para encontrar a localização, basta:
As coordenadas retornam em uma única sequência como '31, -80 '; portanto, a partir daí, você apenas:
fonte
Supondo que você queira fazer isso sozinho e não confiar em outros fornecedores, o IP2Nation fornece um banco de dados MySQL dos mapeamentos que são atualizados à medida que os registros regionais mudam as coisas.
fonte
Eu executo o serviço no IPLocate.io , no qual você pode conectar-se gratuitamente com uma chamada fácil:
O
$res
objeto conterá seus campos de localização geográfica, comocountry
,city
, etc.Confira os documentos para obter mais informações.
fonte
Gosto da GeoLite City gratuita da Maxmind, que funciona para a maioria dos aplicativos e a partir da qual você pode atualizar para uma versão paga, se não for precisa o suficiente. Há uma API PHP incluída, bem como para outros idiomas. E se você estiver executando o Lighttpd como servidor da web, poderá usar um módulo para obter as informações na variável SERVER de cada visitante, se for o que você precisa.
Devo acrescentar que também existe um país Geolite gratuito (que seria mais rápido se você não precisar identificar a cidade da qual o IP é) e o Geolite ASN (se você quiser saber quem é o proprietário do IP) e que finalmente todos esses são para download em seu próprio servidor, são atualizados todos os meses e são bastante rápidos para pesquisar com as APIs fornecidas, pois indicam "milhares de pesquisas por segundo".
fonte
PHP tem uma extensão para isso.
Do PHP.net:
Por exemplo:
fonte
Ipdata.co é uma API de geolocalização de IP rápida e altamente disponível com desempenho confiável.
É extremamente escalável, com 10 terminais em todo o mundo, cada um capaz de lidar com mais de 10.000 solicitações por segundo!
Em php
Aqui está um exemplo do lado do cliente mostrando como você obteria o país, região e cidade;
Aviso Legal;
Eu construí o serviço.
Para exemplos em vários idiomas, consulte o Documentos
Veja também esta análise detalhada das melhores APIs de geolocalização de IP.
fonte
Caso alguém se depare com esse tópico, aqui está outra solução. No timezoneapi.io, você pode solicitar um endereço IP e obter vários objetos em troca (eu criei o serviço). Foi criado porque eu precisava saber em que fuso horário meus usuários estavam, em que lugar do mundo e a que horas são atualmente.
Em PHP - retorna localização, fuso horário e data / hora:
Usando jQuery:
fonte
A seguir, uma versão modificada de um snippet que encontrei que usa http://ipinfodb.com/ip_locator.php para obter suas informações. Lembre-se de que você também pode solicitar uma chave de API com eles e usá-la diretamente para obter as informações fornecidas como achar melhor.
Snippet
Usar
fonte
Se você precisar obter a localização de um endereço IP, poderá usar um serviço geo IP confiável, poderá obter mais detalhes aqui . Ele suporta IPv6.
Como um bônus, permite verificar se o endereço IP é um nó tor, proxy público ou spammer.
Você pode usar javascript ou php como abaixo.
Código Javascript:
Código Php:
Resultado:
fonte
Eu criei um wrapper para o ipinfo.io . Você pode instalá-lo usando o compositor.
Você pode usá-lo desta maneira:
fonte
Você também pode usar o serviço "smart-ip":
fonte
Fiz vários testes com serviços de endereço IP e aqui estão algumas maneiras de fazer isso sozinho. Primeiro, monte um monte de links para sites úteis que eu uso:
https://db-ip.com/db Possui um serviço de pesquisa de IP gratuito e alguns arquivos CSV gratuitos que você pode baixar. Isso usa uma chave API gratuita anexada ao seu email. Limita a 2000 consultas por dia.
http://ipinfo.io/ Serviço gratuito de pesquisa de ip sem uma função api-key PHP:
No final, você obtém algo parecido com isto:
http://www.geoplugin.com/ Um pouco mais antigo, mas este serviço fornece várias informações úteis adicionais, como a moeda do país, código de continente, longitude e muito mais.
http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude Oferece vários arquivos para download com instruções para importá-los para o seu banco de dados. Depois de ter um desses arquivos em seu banco de dados, você pode selecionar os dados facilmente.
Use a função php ip2long (); para transformar o endereço IP em um valor numérico. Por exemplo, 1.1.1.1 torna-se 16843009. Isso permite verificar os intervalos de IP fornecidos pelo arquivo do banco de dados.
Portanto, para descobrir onde o 1.1.1.1 pertence a tudo o que fazemos, execute esta consulta:
Isso retorna esses dados como um exemplo.
fonte
Existem duas abordagens amplas para executar a localização geográfica de IP: uma é fazer o download de um conjunto de dados, hospedá-lo em sua infraestrutura e mantê-lo atualizado. Isso requer tempo e esforço, especialmente se você precisar dar suporte a um grande número de solicitações. Outra solução é usar um serviço de API existente que gerencia todo o trabalho para você e muito mais.
Existem muitos serviços de geolocalização da API: Maxmind, Ip2location, Ipstack, IpInfo etc. etc. Recentemente, a empresa na qual trabalho mudou para o Ipregistry ( https://ipregistry.co ) e eu estava envolvido no processo de decisão e implementação. Aqui estão alguns elementos que você deve considerar ao procurar uma API de geolocalização IP:
Aqui está um exemplo para obter informações de localização geográfica de IP (mas também dados de ameaças e agentes do usuário usando uma chamada):
Nota: Não estou aqui para promover o Ipregistry e digo que é o melhor, mas passei muito tempo analisando as soluções existentes e a solução delas é realmente promissora.
fonte
Se você estiver procurando por um banco de dados atualizado / preciso, recomendo usá-lo aqui, pois estava mostrando minha localização exata, que não foi incluída em muitos outros serviços durante o teste.
(Minha cidade era
Rasht
e meu país estavaIran
com esse endereço IP:2.187.21.235
quando eu estava testando.)Eu recomendo usar o banco de dados em vez dos métodos da API, porque ele será processado muito mais rapidamente localmente.
fonte
Ok pessoal, obrigado por suas sugestões; Embora eu tenha mais de 6k de IPs, alguns serviços falharam em minhas solicitações devido a algumas limitações; Então, você pode usá-los todos no modo fallback;
Se tivermos arquivo de origem com o seguinte formato:
do que você poderia usar este comando de exemplo simples (PoC) para Yii:
Este é algum tipo de código de merda, mas funciona. uso:
Sinta-se livre para usar, modificá-lo e melhorá-lo)
fonte