/usr/local/apache/bin/htcacheclean -vn -p/var/cache/apache -l500M
Monday, February 27, 2017
Kinda rough regex for pattern matching and capturing apache log info
the IP is parsed into \2 \3 and \4
^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) \- \- (\[.*?\]) "(.*?)" (\d+) (\d+) "(.*?)" "(.*?)"$
Geocode a batch of addresses with perl and Google
I am working with this store locator and needed a way to geocode 7k addresses, so I wrote this quick-n-dirty script. Google only lets you geocode 2500 addresses a day. The script will start where it left off, then quit when you hit the query limit. So it feasibly could be run on a cron until all your addresses are coded.
#!/usr/bin/perl
use strict;
use DBI;
use Google::GeoCoder::Smart;
my $geo = Google::GeoCoder::Smart->new();
my $host ="";
my $database ="";
my $user ="";
my $mysqlpassword ="";
my $dbh = DBI->connect("DBI:mysql:database=$database;host=$host","$user","$mysqlpassword",{'RaiseError'=>1});
my $ctr= 0;
my $sql = "SELECT * FROM sb_locations WHERE lat = \"\"";
my $sth = &db_query($sql);
while (my $ref = $sth->fetchrow_hashref) {
my ($num, $error, @results, $returntext) = $geo->geocode(
"address" => stripChars($ref->{'address'}),
"city" => stripChars($ref->{'city'}),
"state" => stripChars($ref->{'state'}),
"zip" => stripChars($ref->{'postal'})
);
my $lat;
my $lng;
eval {
$lat = $results[0]{geometry}{location}{lat};
};
eval {
$lng = $results[0]{geometry}{location}{lng};
};
print "id: $ref->{'id'} returntext?: $returntext error?: $error lat: $lat lng: $lng\n";
if ($error eq 'OVER_QUERY_LIMIT') {
last;
}
if (($lat) && ($lng)) {
$lat = $dbh->quote($lat);
$lng = $dbh->quote($lng);
my $upd_q = "UPDATE sb_locations SET lat = $lat, lng = $lng WHERE id = $ref->{'id'}";
my $sth2 = &db_query($upd_q);
$sth2->finish();
}
$ctr++;
if (($ctr%10)==0) {
print "sleeping\n";
sleep 5;
}
}
$sth->finish();
undef ($sql);
undef ($sth);
$dbh->disconnect();
sub stripChars {
my($text) = @_;
$text =~ s/^\s*//; # strip out leading space if there is one
$text =~ s/\n/ /g; # strip carraige returns
$text =~ s/\t/ /g; # strip tabs
$text =~ s/\a/ /g; # strip carraige returns
$text =~ s/"/'/g; # strip quotes and replace with single quotes
$text =~ s/\s+/ /g; # strip repeating spaces and replace with one
$text =~ s/[^[:ascii:]]+//g;
return ($text);
} # end sub strip chars
sub db_query {
my ($query) = @_;
my $sth = $dbh->prepare("$query");
#print $query;
$sth->execute;
#print $dbh->err;
my $err = $dbh->err;
my $errstr = $dbh->errstr;
if ($err) { print "$err: $errstr on query $query"; }
return $sth;
} # end sub db_query
Subscribe to:
Comments (Atom)

