ジュラルミンの日々 2nd

はてなダイアリーからはてなブログにお引っ越し。DTM関連多めに充実出来たらと思います。

perlでGoogle AnalyticsのAPIをつかってみる

テストでGoogle Analyticsの値を取得したくなったんだけど、UIから取得するのは難しそうなので、APIを使ってみる事にした。
たいした記事ではないけれど自分への備忘録的に残す。

なお公式のドキュメントは↓
http://code.google.com/intl/ja/apis/analytics/docs/index.html

認証にはGoogle Analyticsのアカウントの情報を'https://www.google.com/accounts/ClientLogin'にPOSTしてやるとよいみたい。
アカウント情報は以下の4つ。(もっとあるのかもしれないが、とりあえずこれで動く)

  1. アカウントタイプ
  2. アカウントEmail
  3. アカウントパスワード
  4. サービス名

アカウントはGOOGLE、サービス名は'analytics'でいいみたい。

#account parameter
my $email = <email>; #Emailを指定
my $password = <password>; #パスワードを指定
my $service = 'analytics';
my $auth_key_url = 'https://www.google.com/accounts/ClientLogin';

my $req = HTTP::Request::Common::POST(
  $auth_key_url,
  [
   accountType => 'GOOGLE',
   Email => $email,
   Passwd => $password,
   service => $service,
  ]
);

my $res = $ua->request($req);

認証が成功するとなんかいろいろ返ってくるけど、任意の値をGETするにはAuthの値を使う。
Auth=以降の値を抽出する。

if( $res->content =~ /Auth=([^\s]+)/ ){
 $auth_key = $1;	
}
else{
 print "no match!\n";
 exit(0);
}

Authの値と任意のkey、パラメータでリクエストする。
リクエストのパラメータで必要なのは以下の4つ。なおこれ以外にもオプションで付けられる。

  1. プロファイルID
  2. メトリクスのキー
  3. 開始日
  4. 終了日

プロファイルのIDとは、Google Analyticsにログインした時のURLでpxxxxxxの部分だ。(pは除く)

#request parameter
my $profile_id = <xxxxxxx>; #自分のプロファイルIDを指定
my $metrics = 'visits'; #任意の取りたい値。ここで指定しているvisitsは訪問者
my $start_date = $<start_date>; #$yyyy-mm-ddの型式で日付を指定。
my $end_date = $<end_date>;

my $feed_url = "https://www.google.com/analytics/feeds/data?ids=ga:$profile_id&metrics=ga:$metrics&start-date=$start_date&end-date=$end_date";

$req = HTTP::Request::Common::GET(
	$feed_url, 'Authorization' => "GoogleLogin Auth=$auth_key"
);

$res = $ua->request($req);

最後に返ってきた値をXML::Simpleとかでパースしてやる。

my $xs = new XML::Simple();
my $xs_ref = $xs->XMLin($res->content);

$visitor =  $xs_ref->{'dxp:aggregates'}->{'dxp:metric'}->{value};

これで訪問者数を取得する事が出来る。

APIはもとよりperlも苦手だったけど、今回いろいろ勉強してperlがちょっと好きになってきた。