Net::Google::Analytics::OAuth2 で google analytics api を叩こうとしたら refresh token が取得できなかった
google analytics には api*1 がある。
認証・認可には oauth2 を使う。authsub というのもあるみたいだけどどうやらこれから使うなら oauth2 使っとく方がいいらしい。
api を叩くための各種ライブラリ*2もある。
おいおい perl 無いじゃねーか、と思うと、載ってないだけで cpan にある*3。
認証部分は Net::Google::Analytics::OAuth2 を使う。
よしこれを使おう、まずは pod に従い interactive メソッドで access_token / refresh_token を入手しよう、とすると中途半端に失敗するはず。access_token しか取れない。
実は最近 google 側の仕様変更があった*4ようで、 refresh token を受け取るにはパラメータを追加する必要がある。それにモジュールが追随してない。
というわけで。
--- a/lib/Net/Google/Analytics/OAuth2.pm +++ b/lib/Net/Google/Analytics/OAuth2.pm @@ -70,8 +70,9 @@ sub refresh_access_token { sub interactive { my $self = shift; + my $extra_params = @_ == 1 ? $_[0] : { @_ }; - my $url = $self->authorize_url; + my $url = $self->authorize_url($extra_params);
とでもしてやって、
$oauth->interactive( approval_prompt => "force", access_type => "offline", );
とすると refresh token も取れる。
このモジュールは最近までメンテナンスされてるし github にあるので誰か pull req 送ったら世界が平和になる気がする。
叩く
たとえば
- /you/want/page/path という uri に前方一致する
- 2013/01/01-31 間の
- pvの累計
が欲しいと思ったら
my $req = $analytics->new_request( ids => "ga:$profile_id", dimensions => "ga:pagePath", metrics => "ga:Pageviews", filters => "ga:pagePath=~/you/want/page/path", sort => "-ga:Pageviews", start_date => "2013-01-01", end_date => "2013-01-31", ); my $res = $analytics->retrieve($req); $res->is_success or do { warn json->decode($res->content)->{error}->{message}; exit; }; my $pv = 0; for my $row ( @{$res->rows} ) { $pv += $row->get_pageviews; } say $pv;
とかすると取れる。