perl で Google Analytics API(Net::Google::Analytics は dimensions が必須??)
おなじみGoogle Analyticsでのページビューを日別で外部ファイルにつけていきたくなったので、Net::Google::Analyticsを試してみた!
▼参考
- [perl]PV 上位のコンテンツを Google Analytics から取得する - tech.nanolia
- Google Analytics 開発者向けドキュメント - Google Analytics - Google Code
とりあえず上記URLにある例の通りに実行してみて、うまくいったので、今度は単純に最新のPV(=昨日のPV)を取得してみようと画策。でどうもGoogle Analytics API自体は、dimensionsパラメータが必須では無いみたい。
dimensions
dimensions=ga:source,ga:mediumオプション。
dimensionsパラメータは、ga:browserやga:cityなど、Analytics レポートのメイン データ キーを定義します。ウェブ プロパティの統計情報を分割するには、ディメンションを使用します。たとえばサイトの合計ページビュー数をリクエストすることはできますが、ブラウザごとのページビュー数をリクエストすることでより興味深いデータが得られます。この場合には、Firefox、Internet Explorer、Chrome などからのページビュー数を確認できます。
し・か・し、肝心のNet::Google::Analyticsの方で、dimensionsパラメータが必須?になっている?
正確には、dimensionsパラメータ無しで実行するとこんなエラーが、
parameter dimensions is empty at
/Users/wata/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2
/Net/Google/Analytics/DataFeedRequest.pm line 33.
嫌々Net::Google::Analytics::DataFeedRequestの中身がどんな風になっているのか見てみたところ、ids
、dimensions、metrics、start_date、end_dateが未定義のときに上記のエラーを吐くようになっているみたい。なので、そこからdimensionsだけ外してあげたら、あっさり動いた。良かった、良かった。
変更点(DataFeedRequest.pm)
qw()中の「dimensions」を消した。
for my $name qw(ids metrics start_date end_date) { # dimensionsを消した
my $value = $self->get($name);
die("parameter $name is empty")
if !defined($value) || $value eq '';
}
一応コード
コード自体は上記参考URLにある例のコードとほとんど変わりありませんが。。
#!/usr/bin/perl -w
use strict;
use warnings;
use Config::Pit;
use Net::Google::AuthSub;
use Net::Google::Analytics;
use DateTime;
use DateTime::Duration;
my $table_id = shift or die "Usage: $0 \n";
my $config = pit_get("google.com"); # Config::Pitにセットしたアカウント情報呼び出し
die "not preset account data in Pit." if !%$config;
my $username = $config->{username} or die 'username not found.';
my $password = $config->{password} or die 'password not found.';
my $auth = Net::Google::AuthSub->new( service => 'analytics' );
$auth->login( $username, $password );
my $analytics = Net::Google::Analytics->new;
$analytics->auth_params( $auth->auth_params );
my $today = DateTime->now( time_zone => 'Asia/Tokyo' ) - DateTime::Duration->new( days => 1 );
my $data_feed = $analytics->data_feed;
my $req = $data_feed->new_request;
$req->ids($table_id);
#$req->dimensions('ga:pageTitle'); # ここが無しでもOKに!
$req->metrics('ga:pageviews');
$req->start_date( $today->ymd('-') );
$req->end_date( $today->ymd('-') );
my $res = $data_feed->retrieve($req);
my $entry = $res->entries->[0];
print $entry->metrics->[0]->value, "\n";
あと自前で書かれたプログラムもいくつか見つけた。