Net::Google::Analyticsを使ってみた
少し前に、Nick Wellnhofer / Net-Google-Analytics - search.cpan.orgを使ったので、忘れないうちにメモ
client_idとclient_secretの取得
まず、Oauth認証に利用するclient_idとclient_secretを取得するため、Google Play Developer Consoleにてinstalled applicationでプロジェクト作成
refresh_tokenの取得
取得したclient_idとclient_secretを利用して、refresh_tokenを取得するため、下記のコードを実行。
use strict; use warnings; use Net::Google::Analytics::OAuth2; my $oauth = Net::Google::Analytics::OAuth2->new( client_id => $client_id, client_secret => $client_secret, ); $oauth->interactive;
これを実行すると、URLにアクセスして取得したコードを入力するように言われるので、言われるがままに行うと、access_tokenとrefresh_tokenが取得できます。
Please visit the following URL, grant access to this application, and enter the code you will be shown: https://accounts.google.com/o/oauth2/auth?... Enter code:
PV上位ページの取得
最近の30日間でPV上位のページを取得してみました
取得する項目はDimensions & Metrics Reference - Google Analytics — Google Developersから選ぶ
use strict; use warnings; use utf8; use DateTime; use Net::Google::Analytics; use Net::Google::Analytics::OAuth2; my $profile_id = "***"; my $client_id = "***"; my $client_secret = "***"; my $refresh_token = "***"; my $analytics = Net::Google::Analytics->new; my $oauth = Net::Google::Analytics::OAuth2->new( client_id => $client_id, client_secret => $client_secret, ); my $token = $oauth->refresh_access_token($refresh_token); $analytics->token($token); my $today = DateTime->today; my $req = $analytics->new_request( ids => "ga:$profile_id", dimensions => "ga:pagePath", metrics => "ga:Pageviews,ga:uniquePageviews", sort => "-ga:Pageviews", start_date => $today->clone->subtract( days => 30 )->ymd, end_date => $today->ymd, max_results => 10, ); my $res = $analytics->retrieve($req); die if !$res->is_success; for my $row ( @{$res->rows} ) { print $row->get_page_path,"\t",$row->get_pageviews,"\t",$row->get_unique_pageviews,"\n"; }
ちなみに、結果が$row->get_**で取得できるようになっているので、最初$row->get_pagePathでページのパスが取れると思ったのだが、取れなかった。なんでだろう?と思って、Net::Google::Analytics::Responseを見てみると、下記のコードがその原因で、大文字はアンダースコアと小文字に置換(pagePath -> page_path)されているようだ
# convert camel case $res =~ s/[A-Z]/'_' . lc($&)/ge;