Mojar-Google-Analytics
view release on metacpan or search on metacpan
lib/Mojar/Google/Analytics.pm view on Meta::CPAN
package Mojar::Google::Analytics;
use Mojo::Base -base;
our $VERSION = 1.112;
use 5.014; # For MIME::Base64::encode_base64url
use Carp 'croak';
use IO::Socket::SSL 1.75;
use Mojar::Auth::Jwt;
use Mojar::Google::Analytics::Request;
use Mojar::Google::Analytics::Response;
use Mojo::UserAgent;
# Attributes
# Analytics request
has api_url => 'https://www.googleapis.com/analytics/v3/data/ga';
has ua => sub {
Mojo::UserAgent->new->max_redirects(2)->inactivity_timeout(shift->timeout)
};
has 'profile_id';
has timeout => 60;
sub req {
my $self = shift;
return $self->{req} unless @_;
if (@_ == 1) {
$self->{req} = $_[0];
}
else {
$self->{req} //= Mojar::Google::Analytics::Request->new;
%{$self->{req}} = ( %{$self->{req}},
ids => $self->{profile_id},
@_
);
}
return $self;
}
has res => sub { Mojar::Google::Analytics::Response->new };
# Authentication token
has 'auth_user';
has grant_type => 'urn:ietf:params:oauth:grant-type:jwt-bearer';
has 'private_key';
has jwt => sub {
my $self = shift;
my %param = map +($_ => $self->$_), 'private_key';
$param{iss} = $self->auth_user;
Mojar::Auth::Jwt->new(
iss => $self->auth_user,
private_key => $self->private_key
)
};
has validity_margin => 10; # Too close to expiry (seconds)
has token => sub { $_[0]->_request_token };
# Public methods
sub fetch {
my ($self) = @_;
croak 'Failed to see a built request' unless my $req = $self->req;
# Validate params
$self->renew_token unless $self->has_valid_token;
defined $self->$_ or croak "Missing required field ($_)" for qw(token);
$req->access_token($self->token);
defined $req->$_ or croak "Missing required field ($_)"
( run in 0.508 second using v1.01-cache-2.11-cpan-39bf76dae61 )