OpenCNAM frontend so you can feed it 10 or 11 digits and cache the results.

This commit is contained in:
Brian West 2012-05-31 14:18:58 -05:00
parent 24f6c4056b
commit afeb7f327c
1 changed files with 63 additions and 0 deletions

63
scripts/perl/cnam.cgi Executable file
View File

@ -0,0 +1,63 @@
#!/usr/bin/perl
#
# OpenCNAM front end because they only take 10 digits and can't filter 11 on their side.
#
use Data::Dumper;
use CGI qw/:standard/;
use LWP::UserAgent;
use SDBM_File;
use Fcntl;
my %params = map { $_ => get_data( $_ ) } param;
$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
sub get_data {
my $name = shift;
my @values = param( $name );
return @values > 1
? \@values
: $values[0];
}
print "Content-Type: text/plain\n\n";
tie (my %cache, 'SDBM_File', 'cnam.dbm', O_RDWR|O_CREAT, 0640) || die $!;
my $number = $params{number};
if($number =~ m/1?\d{10}/) {
if($number =~ m/^1(\d{10})$/) {
$number = $1;
}
if($cache{"$number"}) {
print $cache{"$number"};
untie %cache;
exit;
}
my $url = "https://api.opencnam.com/v1/phone/$number?format=text";
my $res = $ua->get( $url );
if ($res->is_success) {
my $content = $res->decoded_content;
if ($content =~ m/^Invalid/) {
# API shouldn't return this crap.
print "UNKNOWN";
} else {
# Cache the entry.
$cache{"$number"} = $content;
# print the entry.
print $content;
}
}
}
untie %cache;