Net::Google::Analyticsを使ってみた

少し前に、Nick Wellnhofer / Net-Google-Analytics - search.cpan.orgを使ったので、忘れないうちにメモ

client_idとclient_secretの取得

まず、Oauth認証に利用するclient_idとclient_secretを取得するため、Google Play Developer Consoleにてinstalled applicationでプロジェクト作成

refresh_tokenの取得

取得したclient_idとclient_secretを利用して、refresh_tokenを取得するため、下記のコードを実行。

use strict;
use warnings;
use Net::Google::Analytics::OAuth2;

my $oauth = Net::Google::Analytics::OAuth2->new(
    client_id => $client_id,
    client_secret => $client_secret,
);
$oauth->interactive;

これを実行すると、URLにアクセスして取得したコードを入力するように言われるので、言われるがままに行うと、access_tokenとrefresh_tokenが取得できます。

Please visit the following URL, grant access to this application, and enter the code you will be shown:

https://accounts.google.com/o/oauth2/auth?...

Enter code:

PV上位ページの取得

最近の30日間でPV上位のページを取得してみました

取得する項目はDimensions & Metrics Reference - Google Analytics — Google Developersから選ぶ

use strict;
use warnings;
use utf8;

use DateTime;
use Net::Google::Analytics;
use Net::Google::Analytics::OAuth2;

my $profile_id = "***";
my $client_id = "***";
my $client_secret = "***";
my $refresh_token = "***";

my $analytics = Net::Google::Analytics->new;
my $oauth = Net::Google::Analytics::OAuth2->new(
    client_id => $client_id,
    client_secret => $client_secret,
);
my $token = $oauth->refresh_access_token($refresh_token);
$analytics->token($token);

my $today = DateTime->today;
my $req = $analytics->new_request(
    ids         => "ga:$profile_id",
    dimensions  => "ga:pagePath",
    metrics     => "ga:Pageviews,ga:uniquePageviews",
    sort        => "-ga:Pageviews",
    start_date  => $today->clone->subtract( days => 30 )->ymd,
    end_date    => $today->ymd,
    max_results => 10,
);

my $res = $analytics->retrieve($req);
die if !$res->is_success;

for my $row ( @{$res->rows} ) {
    print $row->get_page_path,"\t",$row->get_pageviews,"\t",$row->get_unique_pageviews,"\n";
}


ちなみに、結果が$row->get_**で取得できるようになっているので、最初$row->get_pagePathでページのパスが取れると思ったのだが、取れなかった。なんでだろう?と思って、Net::Google::Analytics::Responseを見てみると、下記のコードがその原因で、大文字はアンダースコアと小文字に置換(pagePath -> page_path)されているようだ

# convert camel case
$res =~ s/[A-Z]/'_' . lc($&)/ge;