Net-PublicSuffixList
view release on metacpan or search on metacpan
lib/Net/PublicSuffixList.pm view on Meta::CPAN
=cut
sub longest_suffix_in ( $self, $host ) {
$self->suffixes_in( $host )->@[-1];
}
=item split_host( HOST )
Returns a hash reference with these keys:
host the input value
suffix the longest public suffix
short the input value with the public suffix
(and leading dot) removed
=cut
sub split_host ( $self, $host ) {
my $suffix = $self->longest_suffix_in( $host );
my $short = $host =~ s/\Q.$suffix\E\z//r;
return {
host => $host,
suffix => $suffix,
short => $short
}
}
=item fetch_list_from_local
Fetch the public suffix list plaintext file from the path returned
by C<local_path>. Returns a scalar reference to the text of the raw
UTF-8 octets.
=cut
sub fetch_list_from_local ( $self ) {
return if $self->{no_local};
open my $fh, '<:raw', $self->local_path;
my $data = do { local $/; <$fh> };
$self->{source} = 'local_file';
\$data;
}
=item fetch_list_from_net
Fetch the public suffix list plaintext file from the URL returned
by C<url>. Returns a scalar reference to the text of the raw
UTF-8 octets.
If you've set C<cache_dir> in the object, this method attempts to
cache the response in that directory using C<default_local_file> as
the filename. This cache is different than C<local_file> although you
can use it as C<local_file>.
=cut
sub fetch_list_from_net ( $self ) {
return if $self->{no_net};
state $rc = require Mojo::UserAgent;
state $ua = Mojo::UserAgent->new;
my $path = catfile( $self->{cache_dir}, $self->default_local_file );
my $local_last_modified = (stat $path)[9];
my $headers = {};
if( $self->{cache_dir} ) {
make_path $self->{cache_dir};
if( $local_last_modified ) {
$headers->{'If-Modified-Since'} = Mojo::Date->new($local_last_modified);
}
}
my $tx = $ua->get( $self->url() => $headers );
my $body;
if( $tx->result->code eq '304' ) {
open my $fh, '<:raw', $path;
$body = do { local $/; <$fh> };
close $fh;
$self->{source} = 'net_cached';
}
elsif( $tx->result->code eq '200' ) {
$body = eval { $tx->result->body };
my $date = Mojo::Date->new(
$tx->result->headers->last_modified,
$tx->result->headers->date,
0
);
if( $self->{cache_dir} ) {
open my $fh, '>:raw', $path;
print { $fh } $body;
close $fh;
utime $date->epoch, $date->epoch, $path;
}
$self->{source} = 'net';
}
return \$body;
}
=item url
Return the configured URL for the public suffix list.
=cut
sub url ( $self ) {
$self->{list_url} // $self->default_url
}
=item default_url
Return the default URL for the public suffix list.
=cut
( run in 0.560 second using v1.01-cache-2.11-cpan-39bf76dae61 )