Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ip -> country, city
Forum PHP.pl > Forum > PHP
robert1974
czesc,
Czy ktos moze polecic API lub kod jak zrobic mapowanie z IP na panstwo+miasto?

znalazlem cos takiego ale nie dziala:
Grab the users IP address.
$ip = $_SERVER['REMOTE_ADDR'];

Get the users City, State and Country.
$sturl = 'http://api.hostip.info/get_html.php?ip='.$ip;
$ch = curl_init($sturl);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$res = curl_exec($ch);
$resinfo = curl_getinfo($ch);
curl_close($ch);
preg_match('/City: ([a-zA-Z].+[a-zA-Z]+)/', $res, $r);
preg_match('/ (([A-Z][A-Z])/', $res, $s);
$city = $r[1];
$country = $s[1];

z: http://www.scriptiny.com/2008/04/map-your-...ps-api-and-php/

dzieki,
Robert
trueblue
http://freegeoip.net/csv/TU_IP
Nie zawsze działa, i niekoniecznie poprawnie wskazuje.

http://www.google.pl/search?q=ip+geolocation+database
robert1974
nie wiem jak tego uzyc.

a w googlach tez szukam, ale wciaz porazka.
nospor
http://freegeoip.net/csv/TU_IP
W miejscie TU_IP masz wpisac IP, ktore cie interesuje...
Pyton_000
W adres wstawiasz IP i w odpowiedzi dostajesz CSV z danymi
np:
http://freegeoip.net/json/185.49.14.112
możesz zmienic json na xml, csv, json
robert1974
aha, troche rozjasniliscie, dostalem plik textowy:
"176.35.234.145","GB","United Kingdom","","","","","51.5000","-0.1300","",""

ale jak zrobic by takie mapoweanie z IP -> Panstwo + miasto zrobic w kodzie PHP?

btw: miasta nie ma


tu jeszcze cos znalazlem: http://www.ipinfodb.com/ip_location_api.php
trueblue
Znasz funkcję explode w php?
Albo użyj formatu JSON, kliknij w link od Pyton_000, to zobaczysz gdzie i co jest.

Miasto nie zawsze jest, tu przykład z miastem:
"XXX.XXX.XXX.XXX","PL","Poland","78","Mazowieckie","Pruszków","","52.1626","20.8129","",""
robert1974
@trueblue
jeszcze jestem glabem w tych technologiach, ale szybko sie ucze

oki, czyli tego jsona mam PHP explode porozdzielac i wybrac panstwo, miasto

zaraz poszukam o parsowaniu jsona

rany ile nowosci smile.gif

dzieki chlopaki
trueblue
To co dostałeś, to nie JSON, tylko CSV, jego rozdzielasz explode.
Jeśli będziesz miał JSON i znajdziesz jak go parsować, to właśnie tą znalezioną funkcją.
robert1974
sorry za mega lamerskie pytanie ale co zrobic (w PHP) z tym $sturl by dostac w nowej zmiennej tego JSONa stringa?

$user_ip=$_SERVER['REMOTE_ADDR'];

//calc country/city
$sturl = 'http://freegeoip.net/json/'.$user_ip;

Turson
json_decode i masz tablicę
robert1974
Cytat(Turson @ 13.11.2014, 18:12:50 ) *
json_decode i masz tablicę


parsowanie JSONa to bedzie kolejny krok, najpierw musze sie nauczyc jak przypisac tego JSONa do jakiejs zmiennej w PHP. To co napisalem powyzej.
Turson
  1. $sturl = 'http://freegeoip.net/json/'.$user_ip;
  2. $json = file_get_contents($sturl);
  3. $tablica = json_decode($json);

W ten sposób. Moze sie jednak zdarzyc, ze maja zabezpieczenie przed pobieraniem danych w ten sposób, wtedy pozostaje cURL.
robert1974
Dziala, wielkie dzieki:

$user_ip=$_SERVER['REMOTE_ADDR'];

$sturl = 'http://freegeoip.net/json/'.$user_ip;

$json = file_get_contents($sturl);
$json_a = json_decode($json,true);

//var_dump($json_a);

$country=$json_a["country_code"];
$city=$json_a["city"];

... + zapis do bazy

niestety czasem sie wywala z takim bledem:

Warning: file_get_contents(http://freegeoip.net/json/176.35.234.145) [function.file-get-contents]: failed to open stream: HTTP request failed!

co poczac?
Turson
Napisałem wyzej ze moze sie tak zdarzyc
cUrl - http://stackoverflow.com/questions/697472/...-request-failed
robert1974
tak, tak, wiem pisales, juz na to patrze smile.gif

tak zrobilem:

/// method 2
$sturl = 'http://freegeoip.net/json/'.$user_ip;
$ch = curl_init($sturl);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$res = curl_exec($ch);
//$resinfo = curl_getinfo($ch);
curl_close($ch);

//var_dump($res);

$json_a = json_decode($res,true);

$country=$json_a["country_code"];
$city=$json_a["city"];

... i zapis do bazy, ...wyglada ze dziala

jesze raz dzieki za pomoc

jeszcze raz o tym samym ...

http://freegeoip.net/ juz nie istnieje wiec ponawiam prosbe, czy mozecie mi podpowiedziec co Wy stosujecie do tego typu konwersji?

a przy okazji, wywolanie CURL na stronie bylo zbyt wolne, stad mysle by przeniesc logike konwersji ip->country+city poza kod strony, do jakiegos skryptu php ktory uruchamialbym cronem.

podpowie ktos?

nikt nie robi tego typu operacji? trudno mi uwierzyc jakos smile.gif
Pyton_000
Tak trudno włączyć sobie Google i poszukać questionmark.gif
http://ip-api.com/docs/api:json
robert1974
Nie trudno Pyton, wierz mi, ze mam z 10 zakladek otwartych i ciagle szukam w google. Najlepiej sie uczyc z przykladow.

Tyle ze w internecie jest tyle tych przykladow ale i smieci, ze wole spytac tutaj na forum, gdzie licze ze ktos kto ma pojecie bo uzywa podpowie mi cos sprawdzonego co dziala.

dzieki.
Pyton_000
Ładniej by było napisać

"Hej. Mam pytanie. Znalazłem xx stron które oferują API do zamiany IP na adresy: (tutaj wymieniamy co mamy). Czy któreś wg. Was jest lepsze? Macie z nimi doświadczenie?"

Wtedy Ty dostaniesz poradę nt. przytoczonych przykładów czy warto czy nie, ew. ktoś Ci podeśle coś lepszego. A i w temacie będzie coś wartościowego.
robert1974
zaaplikowalem http://ip-api.com/docs/api:json i ladnie dziala smile.gif

dziekuje mr. Pyton_000
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.