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サイトのデータ解析として使えるかもしれませんね!