Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Geolokalizacja miasta
Forum PHP.pl > Forum > Przedszkole
fenix.robi
Witam,
pytałem wujka google'a o geolokalizacje, gdyż potrzebuje znaleźć najbliższe miasto które znajduje się u odwiedzającego moją stronę, znalazłem skrypt

http://www.geo-ip.dnx.pl/geo.php

lecz moja strona ma charakter komercyjny, i odpada zamieszczanie adresów zwrotnych.

Zastanawiam się czy może jest jakieś zapytanie do google'a dzięki którym po podaniu IP pobierze takie dane jak dł. szer. geograficzną oraz miasto, dla mnie najważniejsza rzeczą jest miasto.

Z góry dziękuję za odpowiedź.
thek
Tak, jest. Google maps + użycie geokodowania smile.gif Podajesz kilka danych jak choćby miasto, województwo i dostajesz wynik. Tu masz już w najnowszej wersji 3. Choć większość serwisów używa jeszcze wersji2. Róznice są zauważalne. Nie chodzi nawet o sposób używania. Nie wiem czemu tak jest, ale mapy w v3 i ich kafle są o wiele wyrazistsze, brak im rozmycia.
http://code.google.com/intl/pl/apis/maps/d....html#Geocoding
fenix.robi
W sumie trochę mi przybliżyło rozwiązanie problemu, lecz to go nie rozwiązuje, gdyż potrzebuje podać współrzędne aby dostać adres, a ja operuję tylko adresem IP użytkownika (gość), myslałem ze znalazłem skrypt na http://www.vista.pl/webmaster/127_geolocal...acja_w_php.html lecz niestety brak klucza google dla tej domenty.
thek
Powiem tam... Skrypt jaki masz nie działa, bo curl używa strony która się sypie winksmiley.jpg Tylko że przy tym wysypaniu się zwróciła mi jednocześnie adres serwera z którego korzysta do geokodowania. Adres w skrypcie jest tylko pośrednikiem i można go po prostu obejść. Przebuduj nieco skrypt by używał
http://api.hostip.info/get_html.php?ip=ADR...p;position=true
a w wyniku dostaniesz choćby coś takiego smile.gif
Kod
Country: POLAND (PL)
City: Warsaw

Latitude: 52.2333
Longitude: 21
IP: ADRES_IP
a to już banalnie się obrabia i co najważniejsze... dostajesz z tej strony współrzędne do geokodowania wprost na tacy smile.gif Tylko uważaj! Nie zawsze znajduje! Jeśli tak będzie w Twoim przypadku to musisz użyć geokodowania po nazwie państwa i miasta choćby od google jakie wspomniałem.

Dodatkowo zacząłem się bawić modyfikacją adresu url i wiem, że nie musisz dostać html, ale także xml modyfikując do formy:
http://api.hostip.info/get_html.php?ip=ADR...p;position=true
By było weselej, to da się też dorwać format JSON, ale już żądaniem POST o nieznanym mi formacie, bo próba wywołania
http://api.hostip.info/get_json.php?ip=ADR...p;position=true
zwraca błąd, iż nie przesłałem pliku. Zapewne da się z tego adresu wyciągnąć jeszcze więcej, ale nie mam już czasu by się bawić.

Najważniejsza zaś rzecz w całości? Serwer zwracający odpowiedź jest bardzo szybki smile.gif Zazwyczaj dostawałem odpowiedź w czasie około sekundy od momentu wpisania adresu do otrzymania wyniku. Podany w znalezionym przez Ciebie skrypcie był z powodu byków nieosiągalny.
fenix.robi
biggrin.gif przed przeczytaniem twojego postu natknąłem się na tą stronę, sprawdziłem moje IP i wyświetliło mi Berlin, co prawda niedaleko mi do granicy PL-DE ale zazwyczaj pokazuje mi przy tym adresie najdalej Wrocław biggrin.gif, sprawdziłem tez koordynaty to też mi wskazuje na Berlin, ale dzięki za zaangażowanie, szukam dalej biggrin.gif
thek
Zapewne dlatego, że wyszukuje nie konkretny adres, ale adres ISP. Możesz jeszcze kombinować z obróbką danych taką:
http://www.db.ripe.net/whois?form_type=sim...p;submit=Search
Ale tu już masz więcej zabawy z wyrażeniami regularnymi.
fenix.robi
Znalazłem taką stronkę:
http://www.melissadata.com/lookups/iplocat...dress=<adres IP>

i strona pokazuje mi poprawne miasto

  1. <tr class="tdresul01"><td class="columresult">IP Address</td><td align="left"><b>ARES IP</b></td></tr>
  2. <tr><td class="columresult">City</td><td align="left"><b>Zielona Gora</b></td></tr>
  3. <tr class="tdresul01"><td class="columresult">State or Region</td><td align="left"><b>Lodzkie</b></td></tr>
  4. <tr><td class="columresult">Country</td><td align="left"><b>Poland</b></td></tr>
  5. <tr class="tdresul01"><td class="columresult">ISP</td><td align="left"><b></b></td></tr>


i moje wyrażenie regularne nie pobiera mi Miasta
  1. $objCurl = curl_init('http://www.melissadata.com/lookups/iplocation.asp?ipaddress='.$varIp);
  2. ...
  3. $reg = '#City</td><td align="left"><b>(.+?)</b></td>#';


skrypt przerobiony z pierwszego postu
thek
Nie działa, bo masz niezabezpieczone znaki specjalne. W tym przypadku są to / i one robią problem.
  1. $reg = '#City<\/td><td align="left"><b>(.+?)<\/b><\/td>#';
Teraz powinno zadziałać. Swoja drogą mój adres IP na stronie melissadata nadal prowadzi i wskazuje na adres providera, czyli Warszawę. Za to description w ripe.net już pokazywało właściwe miasto, czyli Konin. Jak więc widzisz, nadal nie jest to idealne, bezpieczne i wiarygodne rozwiązanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.