PerlでGoogle Analytics API

Google Analytics APIでデータを取得するプログラムをPerlで書いた。
といっても、たつをさんの「「Google Analytics API を Perl から扱うスクリプト」の標準モジュール使用版」からいただいたコードを少し変えただけです。

GoogleAnalytics.pm
package GoogleAnalytics;
 
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Request::Common ();
use LWP::UserAgent;
use XML::Simple;
use Data::Dumper;
 
my $profile_id = '********';
my $email = '********';
my $pass = '********';
my $source = '********';
 
my $ua = LWP::UserAgent->new();
my $xs = XML::Simple->new( KeyAttr => [''], ForceArray => ['entry'] );
my ($req, $res, $auth_key);
 
#GoogleAnalyticsの認証
sub login {
 my ($email, $password, $source) = @_;
 my $auth_url = 'https://www.google.com/accounts/ClientLogin';
 my $service = 'analytics';
  $req = HTTP::Request::Common::POST(
     $auth_url,
     [
     accountType => 'GOOGLE',
     Email => $email,
     Passwd => $password,
     service => $service,
     source => $source
     ]
    );
  $res = $ua->request($req);
  die $res->status_line if $res->is_error;
  my $content = $res->content;
  if ($res->content =~ /Auth=([^\s]+)/) {
   $auth_key = $1;
  } else {
   die "can't find auth key!";
  }
}
#GoogleAnalytics APIをたたく
sub analytic {
 my ($start_date, $end_date, $dimensions, $metrics, $filters) = @_;
 my $args = shift;
 my $feed_url = 'https://www.google.com/analytics/feeds/data';
 my $profile_id = $profile_id;
 $feed_url =
    "$feed_url?ids=$profile_id&metrics=$metrics".
    "&dimensions=$dimensions".
    "&start-date=$start_date&end-date=$end_date".
    "&filters=$filters".
    "&prettyprint=true"; #xxx
    $res = $ua->request(
       HTTP::Request::Common::GET(
       $feed_url, 'Authorization' => "GoogleLogin Auth=$auth_key"
          )
         );
 my $ref = $xs->XMLin($res->content);
 return $ref->{'entry'};
}
#Google Analyticsの登録情報を取得する
sub ls {
 $res = $ua->request(
      HTTP::Request::Common::GET(
        'https://www.google.com/analytics/feeds/accounts/default?prettyprint=true',
        'Authorization' => "GoogleLogin Auth=$auth_key"
        )
      );
 my $ref = $xs->XMLin( $res->content );
 print Dumper($ref), "\n";
}
#離脱率の高いキーワードを取得する
#こんな感じで取得したデータごとにサブルーチンを用意しておくと使いやすいと思う
sub get_exit_word {
 login($email, $pass, $source);
 my ($days, $min_pv) = @_;
 if (!defined($days) || !defined($min_pv)) {
  ls();
 }
 my ($day,$mon,$year) = (localtime(time - 60 * 60 * 24 * $days))[3..5];
 my $start_date = sprintf('%04s-%02s-%02s', $year + 1900, ++$mon, $day);
 ($day,$mon,$year) = (localtime(time))[3..5];
 my $end_date = sprintf('%04s-%02s-%02s', $year + 1900, ++$mon, $day);
 my $dimensions = 'ga:searchKeyword';
 my $metrics = 'ga:searchExits,ga:searchUniques';
 my $filters = "ga:searchUniques%3E%3D$min_pv";
 my $ref = analytic($start_date, $end_date, $dimensions, $metrics, $filters);
 return $ref;
}
 
1;

loginで認証して、analyticでデータを取得するだけです。
analyticの中にある$feed_urlのパラメータをいじることで、いろいろなデータを取得できます。パラメータについてはコチラ
特に、dimensionsとmetricsは取得するデータの種類を指定することができます。dimensionsとmetricsについてはコチラ
取得したデータをいろいろ加工するだけなら、コレで十分っぽいです。
参考

http://chalow.net/2009-10-21-3.html
http://code.google.com/intl/ja/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html
http://code.google.com/intl/ja/apis/analytics/docs/gda/gdataReferenceDataFeed.html