天然パーマです。

PerlでGoogle AnalyticsへアクセスするならNet::Google::Analyticsが便利

fluentdとかTreasure Dataとかログを拾い集めて集計する新しい技術やプラットフォームが出て来てますが、Webの表層レベルだとGoogle Analyticsがやっぱり便利で使えます。ただ、サイト全体のトラフィックを観察するのには向いていますが、例えば、いくつかURLがあってそれぞれのPVを取りたい!って時に毎回毎回URLパスを入れては数字を確認するってのには骨が折れます。そこでGoogle AnalyticsのAPIを使って自動化すると捗ります。

Perlで実装するには Net::Google::Analytics というモジュールがサクッと使う分には便利です。

厳密に言うならば「Google Analytics Core Reporting API」の「Version 3」に対応しているものです。では指定したURLからそのPVを取得するサンプルを紹介しましょう。

まず、OAuthの認証が必要なのですが、この Net::Google::Analytics だと以下のコードを使えば認証用のURLが出てきて必要なIDなどが手に入ります。これはイイ。ちなみに client_id と client_secret はGoogle API管理画面でアプリ登録をすると手に入ります。

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

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

$oauth->interactive;

Refresh Acces Token というのが取得できるので、それを使いつつ、実践スクリプトを書きます。必要な認証部分はこういう感じ。

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

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

次にいよいよ取得したいURLのパスを指定して、リクエストをかけます。$profile_id にはAnalytics用のサイトごとのプロフィールIDを入れてください。取得する期限は今年から今までって感じにしています。

$profile_id = 'your_profile_id';

my $req = $analytics->new_request(
    ids         => "ga:$profile_id",
    dimensions  => "ga:pagePath",
    metrics     => "ga:pageviews",
    filters     => "ga:pagePath==/about.html",
    sort        => "-ga:pageviews",
    start_date  => "2013-01-01",
    end_date    => "2013-02-20",
    max_results => 1,
);

my $res = $analytics->retrieve($req);
die("Error: " . $res->error_message) if !$res->is_success;

my $pageview = $res->rows->[0]->get_pageviews;
print "PV: ", $pageview . "\n";

dimensionsとかmetricsとかで何が指定出来るかはGoogleのオフィシャルドキュメントを参照してください。このケースでは「/about.html」というパスに完全マッチするページの「pageview」を取得し標準出力に印字しています。この部分をうまいことサブルーチン化して使い回したりすれば複数のURLのPVを一気に取得できると思います。

Google Analyticsは随分とよく出来てるのでそのデータをさらにウマい事利用できるとWebサイトのデータ解析として使えるかもしれませんね!