Snippets
Created by
markdiary
last modified
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #
# mt-plugin-AccessRankingGA @coolniikou
#
# ORIGINAL repository :
# https://github.com/coolniikou/mt-plugin-AccessRankingGA
#
package AccessRankingGA::Tag;
use strict;
use base qw(MT::Plugin);
use MT;
use MT::Util qw( start_end_day epoch2ts format_ts trim );
use LWP::UserAgent;
use Net::Google::Analytics;
use Net::Google::Analytics::OAuth2;
use Encode;
sub _hdlr_analytic_tags {
my ( $ctx, $args ) = @_;
my $blog = $ctx->stash('blog');
my $blog_id = $ctx->stash('blog_id');
my $site_url = $blog->site_url;
my $plugin = MT->component('AccessRankingGA');
my $span = $args->{span};
my $now = time;
my $today = start_end_day( epoch2ts( $blog, $now ) );
my $ago;
if ($span) {
$ago =
start_end_day( epoch2ts( $blog, $now - ( 60 * 60 * 24 * $span ) ) );
}
else {
$ago = start_end_day( epoch2ts( $blog, $now - ( 60 * 60 * 24 * 7 ) ) );
}
my $config = {
clientid =>
$plugin->get_config_value( 'GA_client_id', 'blog:' . $blog_id ),
clientsecret =>
$plugin->get_config_value( 'GA_client_secret', 'blog:' . $blog_id ),
refreshaccesstoken =>
$plugin->get_config_value( 'GA_refresh_access_token', 'blog:' . $blog_id ),
profileid =>
$plugin->get_config_value( 'GA_profile_id', 'blog:' . $blog_id ),
maxresult =>
$plugin->get_config_value( 'GA_maxresult', 'blog:' . $blog_id ),
exclude_top =>
$plugin->get_config_value( 'GA_exclude_top', 'blog:' . $blog_id ),
exclude_optional_path => trim(
$plugin->get_config_value(
'GA_exclude_optional_path', 'blog:' . $blog_id
)
),
start => format_ts( '%Y-%m-%d', $ago, $blog ),
end => format_ts( '%Y-%m-%d', $today, $blog ),
};
my $requrl = &get_req_url($config);
my $data = &get_data( $config , $requrl);
return $data if ( MT->VERSION < 5 );
$data = decode_utf8($data);
}
sub get_data {
my ( $config , $requrl) = @_;
my $plugin = MT->component('AccessRankingGA');
my $ua =
MT->new_ua( { agent => join( "/", $plugin->name, $plugin->version ) } );
my $res = $ua->get($requrl);
if ( $res->is_success ) {
return $res->content;
}
else {
MT->log(
{
message => $plugin->translate('as_contents_error')
. $res->status_line,
class => 'system',
level => MT::Log::ERROR(),
}
);
die $plugin->translate('as_contents_error') . $res->status_line;
}
}
sub get_req_url {
# GA OAouth
my $config = shift;
my $plugin = MT->component('AccessRankingGA');
my $analytics = Net::Google::Analytics->new;
my $oauth = Net::Google::Analytics::OAuth2->new(
client_id => $config->{clientid},
client_secret => $config->{clientsecret},
);
my $token = $oauth->refresh_access_token($config->{refreshaccesstoken});
$analytics->token($token);
# Set GA profile ID
my $profile_id = $config->{profileid};
# request parms
my $req = $analytics->new_request(
ids => "ga:$profile_id",
dimensions => "ga:pagePath,ga:pageTitle",
metrics => "ga:uniquePageviews",
sort => "-ga:uniquePageviews",
# filters => "ga:pagePath==/index.html",
start_date => $config->{start},
end_date => $config->{end},
max_results => $config->{maxresult},
);
# Make Request URL
(my $this_token = $analytics->token($token)->[1]) =~ s/bearer //i;
my $url = $analytics->uri($req) . "&access_token=" . $this_token;
my $res = $analytics->retrieve($req);
if ( $res->is_success ) {
return $url;
}
else {
MT->log(
{
message => $plugin->translate('as_contents_error')
. $res->status_line,
class => 'system',
level => MT::Log::ERROR(),
}
);
die $plugin->translate('as_contents_error') . $res->status_line;
}
}
1;
|
Comments (1)
You can clone a snippet to your computer for local editing. Learn more.
require module: Net::Google::Analytics
and refresh token