wata.dev

perl で Google Analytics API(Net::Google::Analytics は dimensions が必須??)

おなじみGoogle Analyticsでのページビューを日別で外部ファイルにつけていきたくなったので、Net::Google::Analyticsを試してみた!

▼参考

とりあえず上記URLにある例の通りに実行してみて、うまくいったので、今度は単純に最新のPV(=昨日のPV)を取得してみようと画策。でどうもGoogle Analytics API自体は、dimensionsパラメータが必須では無いみたい。

Data API - データ フィード

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";

あと自前で書かれたプログラムもいくつか見つけた。

ブログの記事一覧