Individuazione ip e scelta automatica della città

Francesco Renmen Sorce

Nuovo Utente
19 Lug 2012
10
0
0
Salve a tutti,

Vorrei sapere se fosse possibile creare un programma in grado di individuare la città tramite l'ip e scegliere in automatico la città corrispondente nel sito per far apparire le news di quella città. E' possibile oppure ho necessità di Geoip?

Grazie a tutti
 
Non è possibile neanche con geoip. Puoi indovinare una zona più vasta, ma non la città precisa!
 
Credo sia possibile, perchè tramite l'ip individui la città, ovviamente ci sono i margini di errori. E' lo stesso sistema che usa groupon e altri, appena entri ti localizza come città
 
ciao
googlando ho trovato questo, non l'ho provato quindi non so se funzia
PHP:
<?
// IP Address of the guest
$ip = $_SERVER['REMOTE_ADDR'];   
echo "<b>IP Address= $ip</b><br />";
$your_key = 'YOUR API KEY';
$url = "http://api.ipinfodb.com/v3/ip-city/?key=$your_key&ip=$ip&format=json";
$data = json_decode(file_get_contents($url));
echo $guest_ip = ucwords(strtolower($data->cityName.', '.$data->countryName));
echo "<br />";
echo $guest_ccode =  $data->countryCode;
?>
 
@Borgo
a me non funzia
io ho trovato questo
PHP:
$ip = $_SERVER['REMOTE_ADDR'];
$geo = file_get_contents('http://www.geoplugin.net/json.gp?ip=' . $ip);
$json = json_decode($geo);
$citta = $json->geoplugin_city;
echo $citta;
ma come dice marcomg non puo essere preciso
ci sono dei servizi a pagamento ma nemmeno quelli sono precisi
 
ciao
quello di criric mi sembra meglio (google è un rompi..., ma i suoi servizi sono tra i più affidabili) , comunque ho letto che l'errore può essere anche notevole (credo che rilevi il nodo), quindi oltre all'automatismo devi dare all'utente la possibilità di selezionare manualmente la città
 
Su di me c'è un errore di 260 Km, quindi lascia perdere se non per scegliere la nazione o la regione! Google per avere la precisione sui wifi ha girato tutto il mondo con le sue "automobili" salvando gli ssid e la loro posizione geografica!
 
Ovviamente dipende anche con cosa (chiavetta, wifi, o altro) sei connesso, come, dove e tanti altri fattori per avere una posizione precisa.
Noi non possiamo fare altro che approssimarla.
 
Ho utilizzato il codice è funziona, però mi serviva anche la seconda parte cioè la scelta automatica della città, spero che mi potete aiutare. Allora avendo questo codice che individua la città tramite l'ip :

PHP:
 $ip = $_SERVER['REMOTE_ADDR']; 
$geo = file_get_contents('http://www.geoplugin.net/json.gp?ip=' . $ip); 
$json = json_decode($geo); 
$city = $json->geoplugin_city;
echo $city; ?>

a questo punto, a me non serve solamente che venga "stampata" la città, ma mi serve una scelta automatica della città in una lista. Nel sito ho questo:

HTML:
<h2> {$city['name']} </h2>

mentre nel file city.php è questo
PHP:
need_manager(true);

$system = Table::Fetch('system', 1);

if ($_POST) {
	unset($_POST['commit']);
	/* hot city convert */
	$cityname = preg_split('/,\s?+/', $_POST['hotcity'], -1, PREG_SPLIT_NO_EMPTY);
	$hotcity = array();
	$cities = DB::LimitQuery('category', array(
		'condition' => array(
			'name' => $cityname,
			'zone' => 'city',
		),
	));
	$oa = Utility::OptionArray($cities, 'name', 'id');
	$_POST['hotcity'] = array();
	foreach($cityname AS $one) { $_POST['hotcity'][] = $oa[$one]; }
	/* merget */
	$INI = Config::MergeINI($INI, $_POST);
	$INI = ZSystem::GetUnsetINI($INI);
	/* end */

	$value = Utility::ExtraEncode($INI);
	$table = new Table('system', array('value'=>$value));
	if ( $system ) $table->SetPK('id', 1);
	$flag = $table->update(array( 'value'));

	Session::Set('notice', 'Information is updated.');
	Utility::Redirect( WEB_ROOT . '/manage/system/city.php');	
}

$hotcity = Utility::GetColumn($hotcities, 'name');
$hotcity = join(', ', $hotcity);
include template('manage_system_city');


Come faccio a far scegliere in automatico la suddetta città? Grazie mille
 
l'altro file city.php dovrebbe essere questo:

PHP:
$ename = strval($_GET['ename']);

($currefer = strval($_GET['refer'])) || ($currefer = strval($_GET['r']));
if ($ename!='none') {
	$city = Table::Fetch('category', $ename, 'ename');
	if ($city) { 
		cookie_city($city);
		$currefer = udecode($currefer);
		if ($currefer) {
			Utility::Redirect($currefer);
		} else if ( $_SERVER['HTTP_REFERER'] ) {
			if (!preg_match('#'.$_SERVER['HTTP_HOST'].'#', $_SERVER['HTTP_REFERER'])) {
				Utility::Redirect( WEB_ROOT . '/index.php');
			}
			if (preg_match('#/city#', $_SERVER['HTTP_REFERER'])) {
				Utility::Redirect(WEB_ROOT .'/index.php');
			}
			Utility::Redirect($_SERVER['HTTP_REFERER']);
		}
		Utility::Redirect(WEB_ROOT .'/index.php');
	}
}

$cities = DB::LimitQuery('category', array(
	'condition' => array( 'zone' => 'city') ,
));
$cities = Utility::AssColumn($cities, 'letter', 'ename');
include template('city');
 

Discussioni simili