Oggi ho scoperto il sito di un tizio che garantisce di fornire la geolocalizzazione esatta di qualsiasi IP. Il database è gratuito e questa persona sostiene che lo terrà aggiornato su base mensile. Sarebbe fantastico :)

Cosa potevo fare per provarlo? Ovviamente cercare di capire da dove provengono le visite delle persone (o altro) che usano Internet Explorer 6. Il test è stato utile solo per provare che non è vero, purtroppo, che la maggior parte degli IE6 sono dei bot travestiti.

Gli impazienti possono vedere i risultati aggregati su questo documento gdocs.

Per i curiosi, ecco come ho proceduto. I dati sono quelli di un mio sito, frequentato per la maggior parte da utenti italiani, raccolti in un periodo di tre mesi.

Ho scaricato il database (è un dump MySQL di circa 68MB) e me lo sono importato in locale.

Con queste due righe di bash (spezzate per motivi di questo spazio) mi sono procurato tutti gli IP degli utilizzatori di IE6 (circa 6500, al momento).

grep "MSIE 6.0" access.log > ie6
awk '{print $1'} ie6 | sort | uniq > ip_ie6

Infine qualche riga di PHP:

$ips = file('ip_ie6');
$countries=$cities=array();
foreach($ips as $ip) {
  list($a,$b,$c,$d) = split('\.',$ip);
  $val = ($a*256+$b)*256+$c;
  $sql = "SELECT * FROM `ip_group_city` where `ip_start` <= {$val} order by ip_start desc limit 1";
  $row = mysql_fetch_object(mysql_query($sql));
  $countries[$row->country_code]++;
  if (!empty($row->city))
    $cities[$row->city . ", " . $row->country_code]++;
}

asort($countries);
foreach(array_reverse($countries) as $country => $count) {
  print "$country\t$count\n";
}

asort($cities);
foreach(array_reverse($cities) as $city => $count) {
  print "$city\t$count\n";
}

Nota che usando un tab (\t) e un ritorno a capo (\n) si può fare copia & incolla direttamente dentro uno spreadsheet di di GDocs e lui “sentirà” la suddivisione in colonne.