App-Zapzi

 view release on metacpan or  search on metacpan

lib/App/Zapzi/Fetchers/URL.pm  view on Meta::CPAN

package App::Zapzi::Fetchers::URL;
# ABSTRACT: fetch article via URL


use utf8;
use strict;
use warnings;

our $VERSION = '0.017'; # VERSION

use Carp;
use Data::Validate::URI 0.06;
use HTTP::Tiny;
use HTTP::CookieJar;
use Moo;

with 'App::Zapzi::Roles::Fetcher';


sub name
{
    return 'URL';
}


sub handles
{
    my $self = shift;
    my $source = shift;

    my $v = Data::Validate::URI->new();
    my $url = $v->is_web_uri($source) || $v->is_web_uri('http://' . $source);
    return $url;
}


sub fetch
{
    my $self = shift;

    my $jar = HTTP::CookieJar->new;
    my $http = HTTP::Tiny->new(cookie_jar => $jar);

    my $url = $self->source;
    my $response = $http->get($url, $self->_http_request_headers());

    if (! $response->{success} || ! length($response->{content}))
    {
        my $error = "Failed to fetch $url: ";
        if ($response->{status} == 599)
        {
            # Internal exception to HTTP::Tiny
            $error .= $response->{content};
        }
        else
        {
            # Error details from remote server
            $error .= $response->{status} . " ";
            $error .= $response->{reason};
        }
        $self->_set_error($error);
        return;
    }

    $self->_set_text($response->{content});
    $self->_set_content_type($response->{headers}->{'content-type'});

    return 1;
}

sub _http_request_headers
{
    my $self = shift;

    my $ua = "App::Zapzi";

    no strict 'vars'; ## no critic - $VERSION does not exist in dev
    $ua .= "/$VERSION" if defined $VERSION;

    return {headers => {
                           'User-agent' => $ua,
                           # Don't gzip encode the response
                           'Accept-encoding' => 'identity'
                       }};
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

App::Zapzi::Fetchers::URL - fetch article via URL

=head1 VERSION

version 0.017



( run in 0.937 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )