Chcę uzyskać informacje o mieście, stanie i kraju użytkownika z jego adresu IP, aby móc dostosować swoją stronę internetową do jej lokalizacji. Czy jest dobry i niezawodny sposób na zrobienie tego w PHP? Używam JavaScript do skryptów po stronie klienta, PHP do skryptów po stronie serwera i MySQL do bazy danych.
php
geolocation
ip
geoip
Ben Dowling
źródło
źródło
Odpowiedzi:
Możesz pobrać bezpłatną bazę danych GeoIP i wyszukać adres IP lokalnie lub możesz skorzystać z usługi innej firmy i przeprowadzić zdalne wyszukiwanie. Jest to prostsza opcja, ponieważ nie wymaga konfiguracji, ale wprowadza dodatkowe opóźnienia.
Jedna usługa strony trzeciej, której możesz użyć, to moja, http://ipinfo.io . Podają nazwę hosta, lokalizację geograficzną, właściciela sieci i dodatkowe informacje, np .:
Oto przykład PHP:
Możesz także użyć go po stronie klienta. Oto prosty przykład jQuery:
źródło
null
nazwę mojego miasta. To nie jest jak małe miasto czy coś takiego, ale nadal nie można go zlokalizować. Jeśli to nie działa dobrze w USA, wątpię, jak często zwróci również wartość zerową poza USA.Pomyślałem, że opublikuję, ponieważ wydaje się, że nikt nie podał informacji o tym konkretnym interfejsie API, ale zwraca dokładnie to, czego szukam i możesz go zwrócić w wielu formatach
json, xml and csv
.To da ci wszystko, czego możesz chcieć:
źródło
Przykład czystego Javascript, korzystający z usług https://geolocation-db.com. Zapewniają one rozwiązanie JSON i JSONP-callback.
Nie wymaga jQuery!
źródło
https://geoilocation-db.com
API?Za pomocą Google APIS:
źródło
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=586Musisz skorzystać z usługi zewnętrznej ... takiej jak http://www.hostip.info/ jeśli wyszukujesz w Google hasło „geo-ip”, możesz uzyskać więcej wyników.
Interfejs API Host-IP oparty jest na protokole HTTP, dzięki czemu można go używać w PHP lub JavaScript, w zależności od potrzeb.
źródło
Napisałem bota za pomocą interfejsu API z ipapi.co , oto jak możesz uzyskać lokalizację adresu IP (np.
1.2.3.4
) Wphp
:Ustaw nagłówek:
Uzyskaj odpowiedź JSON
uzyskać określone pole (kraj, strefa czasowa itp.)
źródło
To pytanie jest chronione, co rozumiem. Jednak nie widzę tutaj odpowiedzi, widzę, że wiele osób pokazuje, co wymyślili, mając to samo pytanie.
Obecnie istnieje pięć regionalnych rejestrów internetowych o różnym stopniu funkcjonalności, które służą jako pierwszy punkt kontaktowy w zakresie własności intelektualnej. Proces ten przebiega nieustannie, dlatego różne usługi tutaj działają czasami, a innym razem nie.
Who Is jest (oczywiście) starożytnym protokołem TCP - sposób, w jaki działał pierwotnie, polegał na połączeniu z portem 43, co sprawia, że problematyczne jest kierowanie go przez dzierżawione połączenia, zapory ogniowe ... itp.
W tej chwili - większość Who Is jest wykonywana przez RESTful HTTP, a ARIN, RIPE i APNIC mają działające usługi RESTful. LACNIC zwraca 503 i AfriNIC najwyraźniej nie ma takiego API. (Wszystkie mają jednak usługi online.)
To da ci - adres zarejestrowanego właściciela adresu IP, ale - nie lokalizację twojego klienta - musisz go od nich uzyskać, a także - musisz o to poprosić. Ponadto serwery proxy są najmniejszymi zmartwieniami podczas sprawdzania poprawności adresu IP, który Twoim zdaniem jest źródłem.
Ludzie nie doceniają pojęcia, że są śledzeni, więc - moje myśli - zdobądź je od swojego klienta bezpośrednio i za ich zgodą i oczekuj, że wiele się na tym pomyli.
źródło
Spójrz na interfejs API z hostip.info - zawiera wiele informacji.
Przykład w PHP:
Jeśli ufasz hostip.info, wydaje się, że jest to bardzo przydatny interfejs API.
źródło
Usługa w odpowiedzi Bena Dowlinga uległa zmianie, więc teraz jest prostsza. Aby znaleźć lokalizację, po prostu wykonaj:
Współrzędne wracają w jednym ciągu, np. „31, -80”, więc stamtąd po prostu:
źródło
Zakładając, że chcesz to zrobić sam, a nie polegać na innych dostawcach, IP2Nation zapewnia bazę danych MySQL mapowań, które są aktualizowane w miarę zmian w rejestrach regionalnych.
źródło
Prowadzę usługę na IPLocate.io , do której możesz podłączyć się za darmo jednym prostym połączeniem:
$res
Obiekt będzie zawierać swoje pola geolokalizacji jakcountry
,city
itpSprawdź dokumenty, aby uzyskać więcej informacji.
źródło
Podoba mi się bezpłatny GeoLite City od Maxmind, który działa dla większości aplikacji i z którego możesz uaktualnić do wersji płatnej, jeśli nie jest wystarczająco precyzyjna. Zawiera PHP API , a także dla innych języków. A jeśli używasz Lighttpd jako serwera WWW, możesz nawet użyć modułu aby uzyskać informacje w zmiennej SERVER dla każdego użytkownika, jeśli tego potrzebujesz.
Powinienem dodać, że jest też bezpłatny Geolite Country (który byłby szybszy, jeśli nie musisz wskazywać miasta, z którego pochodzi IP) i Geolite ASN (jeśli chcesz wiedzieć, kto jest właścicielem IP) i że w końcu wszystkie są do pobrania na własnym serwerze, są aktualizowane co miesiąc i dość szybko można je wyszukać za pomocą dostarczonych interfejsów API, ponieważ określają „tysiące wyszukiwań na sekundę”.
źródło
PHP ma do tego rozszerzenie.
Z PHP.net:
Na przykład:
źródło
Ipdata.co to szybki, wysoce dostępny interfejs API geolokalizacji IP o niezawodnej wydajności.
Jest niezwykle skalowalny dzięki 10 punktom końcowym na całym świecie, z których każdy jest w stanie obsłużyć> 10 000 żądań na sekundę!
W php
Oto przykład po stronie klienta pokazujący, w jaki sposób można uzyskać kraj, region i miasto;
Zrzeczenie się;
Zbudowałem usługę.
Przykłady w wielu językach można znaleźć w Dokumentach
Zobacz także tę szczegółową analizę najlepszych interfejsów API geolokalizacji IP.
źródło
Jeśli ktoś natknie się na ten wątek, oto inne rozwiązanie. W timezoneapi.io możesz poprosić o adres IP i uzyskać w zamian kilka obiektów (utworzyłem usługę). Został stworzony, ponieważ musiałem wiedzieć, w której strefie czasowej byli moi użytkownicy, gdzie na świecie i która jest obecnie.
W PHP - zwraca lokalizację, strefę czasową oraz datę / godzinę:
Korzystanie z jQuery:
źródło
Poniżej znajduje się zmodyfikowana wersja fragmentu, który znalazłem i który używa http://ipinfodb.com/ip_locator.php w celu uzyskania jego informacji. Pamiętaj, że możesz również ubiegać się o klucz API wraz z nim i używać interfejsu API bezpośrednio, aby uzyskać informacje dostarczane według własnego uznania.
Skrawek
Używać
źródło
Jeśli potrzebujesz uzyskać lokalizację z adresu IP, możesz skorzystać z niezawodnej usługi geo ip, możesz uzyskać więcej informacji tutaj . Obsługuje IPv6.
Jako bonus pozwala sprawdzić, czy adres IP jest węzłem tor, publicznym proxy lub spamerem.
Możesz użyć javascript lub php jak poniżej.
Kod JavaScript:
Kod php:
Wynik:
źródło
Stworzyłem opakowanie dla ipinfo.io . Możesz zainstalować go za pomocą kompozytora.
Możesz użyć tego w następujący sposób:
źródło
Możesz także skorzystać z usługi „smart-ip”:
źródło
Zrobiłem wiele testów z usługami adresów IP i oto kilka sposobów, jak to zrobić sam. Najpierw kilka linków do przydatnych stron, z których korzystam:
https://db-ip.com/db Posiada bezpłatną usługę wyszukiwania ip i kilka darmowych plików csv, które można pobrać. Używa to darmowego klucza API dołączonego do wiadomości e-mail. Ogranicza się do 2000 zapytań dziennie.
http://ipinfo.io/ Bezpłatna usługa wyszukiwania ip bez klawiszy PHP:
W końcu dostajesz coś takiego:
http://www.geoplugin.com/ Nieco starszy, ale ta usługa zawiera wiele dodatkowych przydatnych informacji, takich jak waluta poza krajem, kod kontynentu, długość geograficzna i inne.
http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude Oferuje kilka plików do pobrania z instrukcjami importowania ich do bazy danych. Gdy masz już jeden z tych plików w bazie danych, możesz dość łatwo wybrać dane.
Użyj funkcji php ip2long (); aby zmienić adres IP na wartość liczbową. Na przykład 1.1.1.1 staje się 16843009. Pozwala to skanować w poszukiwaniu zakresów ip podanych przez plik bazy danych.
Aby dowiedzieć się, gdzie należy do 1.1.1.1, uruchom następujące zapytanie:
Zwraca to dane jako przykład.
źródło
Istnieją 2 szerokie podejścia do geolokalizacji IP: jednym z nich jest pobranie zestawu danych, umieszczenie go w infrastrukturze i utrzymanie go na bieżąco. Wymaga to czasu i wysiłku, zwłaszcza jeśli potrzebujesz obsługi dużej liczby żądań. Innym rozwiązaniem jest użycie istniejącej usługi API, która zarządza całą pracą za Ciebie i nie tylko.
Istnieje wiele usług API Geolokalizacji API: Maxmind, Ip2location, Ipstack, IpInfo itp. Ostatnio firma, dla której pracuję, przeszła na Ipregistry ( https://ipregistry.co ) i byłem zaangażowany w proces podejmowania decyzji i wdrażania. Oto kilka elementów, które należy wziąć pod uwagę, szukając interfejsu API geolokalizacji IP:
Oto przykład uzyskania informacji o geolokalizacji IP (ale także danych dotyczących zagrożeń i agenta użytkownika za pomocą jednego połączenia):
Uwaga: nie jestem tutaj, by promować Ipregistry i twierdzę, że jest najlepszy, ale długo analizowałem istniejące rozwiązania, a ich rozwiązania są naprawdę obiecujące.
źródło
Jeśli szukasz zaktualizowanej / dokładnej bazy danych, polecam skorzystać z tej tutaj, ponieważ pokazywała ona moją dokładną lokalizację, która nie była uwzględniona w wielu innych usługach podczas testowania.
(Moje miasto było,
Rasht
a mój kraj byłIran
z tym adresem ip:2.187.21.235
kiedy testowałem.)Zalecam stosowanie baz danych zamiast metod API, ponieważ będą one przetwarzane znacznie szybciej lokalnie.
źródło
Okej, dzięki za sugestie; Chociaż mam ponad 6 tys. Adresów IP, niektóre usługi nie spełnią moich żądań z powodu pewnych ograniczeń; Możesz więc użyć ich wszystkich w trybie awaryjnym;
Jeśli mamy plik źródłowy w następującym formacie:
niż można użyć tego prostego polecenia expample (PoC) dla Yii:
To jest jakiś gówniany kod, ale działa. stosowanie:
Używaj, modyfikuj i rób to lepiej)
źródło