App-geoip
view release on metacpan or search on metacpan
my $zip = Archive::Zip->new;
$zip->read ($zcfn) and die "Cannot unzip $zcfn\n";
my @cmn = $zip->memberNames or die "$zcfn hasd no members\n";
say "Reading Country info ...";
my %ctry;
$dbh->do ("$truncate continent");
foreach my $cnm (grep m{\bGeoLite2-Country-Locations-en.csv$}i => @cmn) {
my $m = $zip->memberNamed ($cnm) or next;
my $c = $m->contents or next;
# geoname_id,locale_code,continent_code,continent_name,country_iso_code,country_name,is_in_european_union
# 49518,en,AF,Africa,RW,Rwanda,0
csv (in => \$c, headers => "auto", out => undef, on_in => sub {
$cont{$_{continent_code}} ||= $_{continent_name};
my $id = $_{geoname_id} or return;
my $ctry = {
id => $id,
name => $_{country_name},
iso => $_{country_iso_code},
continent => $_{continent_code},
eu => $_{is_in_european_union},
say "Reading City info ...";
my (%country, %city);
{ my $sth = $dbh->prepare ("select id, name from country");
$sth->execute;
while (my $r = $sth->fetch) { $country{$r->[1]} = $r->[0] }
}
foreach my $cnm (grep m{\bGeoLite2-City-Locations-en.csv$}i => @cmn) {
my $m = $zip->memberNamed ($cnm) or next;
my $c = $m->contents or next;
# geoname_id,locale_code,continent_code,continent_name,country_iso_code,
# country_name,subdivision_1_iso_code,subdivision_1_name,
# subdivision_2_iso_code,subdivision_2_name,city_name,metro_code,
# time_zone,is_in_european_union
# 5819,en,EU,Europe,CY,Cyprus,02,Limassol,,,Souni,,Asia/Nicosia,1
$dbh->do ("$truncate city");
$dbh->commit;
my $n;
my $sti = $dbh->prepare ("insert into city values (?, ?, ?, ?, ?, ?)");
csv (in => \$c, headers => "auto", out => undef, on_in => sub {
++$n % 1000 or print STDERR " $n\r";
lib/App/geoip.pm view on Meta::CPAN
my $zip = Archive::Zip->new;
$zip->read ($zcfn) and die "Cannot unzip $zcfn\n";
my @cmn = $zip->memberNames or die "$zcfn hasd no members\n";
say "Reading Country info ...";
my %ctry;
$dbh->do ("$truncate continent");
foreach my $cnm (grep m{\bGeoLite2-Country-Locations-en.csv$}i => @cmn) {
my $m = $zip->memberNamed ($cnm) or next;
my $c = $m->contents or next;
# geoname_id,locale_code,continent_code,continent_name,country_iso_code,country_name,is_in_european_union
# 49518,en,AF,Africa,RW,Rwanda,0
csv (in => \$c, headers => "auto", out => undef, on_in => sub {
$cont{$_{continent_code}} ||= $_{continent_name};
my $id = $_{geoname_id} or return;
my $ctry = {
id => $id,
name => $_{country_name},
iso => $_{country_iso_code},
continent => $_{continent_code},
eu => $_{is_in_european_union},
lib/App/geoip.pm view on Meta::CPAN
say "Reading City info ...";
my (%country, %city);
{ my $sth = $dbh->prepare ("select id, name from country");
$sth->execute;
while (my $r = $sth->fetch) { $country{$r->[1]} = $r->[0] }
}
foreach my $cnm (grep m{\bGeoLite2-City-Locations-en.csv$}i => @cmn) {
my $m = $zip->memberNamed ($cnm) or next;
my $c = $m->contents or next;
# geoname_id,locale_code,continent_code,continent_name,country_iso_code,
# country_name,subdivision_1_iso_code,subdivision_1_name,
# subdivision_2_iso_code,subdivision_2_name,city_name,metro_code,
# time_zone,is_in_european_union
# 5819,en,EU,Europe,CY,Cyprus,02,Limassol,,,Souni,,Asia/Nicosia,1
$dbh->do ("$truncate city");
$dbh->commit;
my $n;
my $sti = $dbh->prepare ("insert into city values (?, ?, ?, ?, ?, ?)");
csv (in => \$c, headers => "auto", out => undef, on_in => sub {
++$n % 1000 or print STDERR " $n\r";
( run in 2.200 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )