古い記事
ランダムジャンプ
新しい記事
ゆーすけべ氏の「Google Analytics API を Perl から扱うスクリプト」が非常に素晴らしいのですが、標準Perlモジュールしか入ってない環境だといろいろとアレだったので改造しました。

- [ゆ]: Google Analytics API を Perl から扱うスクリプト
http://yusukebe.com/archives/09/10/19/054257.html
- Google Analytics Developer Docs - Google Analytics - Google Code
http://code.google.com/intl/ja/apis/analytics/docs/

標準モジュールうんぬんよりも、「さくらの500円レンタルサーバで動くようにしました!」というのが正しいか。(追記091022: さくらのデフォルト環境で、ということです。説明不足でした。)


スクリプト(仮名 gaapi.pl)の使い方。
コマンドラインから使います。
引数なしで実行すると、ProfileID が分かります。数字6桁くらいのやつ。
その ProfileID と日付を引数に渡すとその日のPVが分かります。
実行例:
./gaapi.pl ga:138852 2009-10-10

以下、コード(gaapi.pl):
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Request::Common ();
use LWP::UserAgent;
use XML::Simple;
use Data::Dumper;

my $email = 'YOU@gmail.com';
my $password = 'PASSWORD';
my $source = 'yusukebe-GoogleAnalyticsCommand-001-kai1';
my ( $req, $res, $auth_key );
my $ua = LWP::UserAgent->new();
my $xs = XML::Simple->new( KeyAttr => [''], ForceArray => ['entry'] );

auth();
if ( defined $ARGV[0] and defined $ARGV[1] ) {
    analytic( { profile_id => $ARGV[0], date_string => $ARGV[1] } );
} else {
    ls();
}

sub auth {
    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!";
    }
}

sub analytic {
    my $args = shift;
    my $feed_url = 'https://www.google.com/analytics/feeds/data';
    my $profile_id = $args->{profile_id};
    my $date_string = $args->{date_string};
    $feed_url =
        "$feed_url?ids=$args->{profile_id}&metrics=ga:pageviews".
	"&start-date=$args->{date_string}&end-date=$args->{date_string}".
	"&prettyprint=true"; #xxx
    $res = $ua->request(
        HTTP::Request::Common::GET(
            $feed_url, 'Authorization' => "GoogleLogin Auth=$auth_key"
        )
    );

    my $ref = $xs->XMLin( $res->content );
    print Dumper($ref), "\n";
}

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";
}
この記事に言及しているこのブログ内の記事