ブログをやっているとアクセスとか気になったりしますよね?
記事毎のPV数だったりはてぶ数だったり...
GoogleAnalyticsから見れば。。。でもよかったのですが、ブログのURL毎のPV数とかを一覧で出したいといった場合にちょっと不便だったのでGoogleAnalyticsのAPIを使ってPVを取得してみることにしました
Net::Google::Analyticsを使ってみます
Google Developer Console
APIを有効にする
- 下記を参考にしてAPI呼び出しを行えるようにする
- 他にも探せば色々あるはず
初心者でも分かる!なGoogle Analytics APIの使い方
OAuth2 token の生成
client_id,client_secret,redirect_uriを設定し、スクリプトを実行する
Net::Google::Analytics::OAuth2モジュールを使いrefresh_tokenを生成する
- token.pl
!/usr/bin/env perl use strict; use warnings; use Net::Google::Analytics::OAuth2; my $client_id = "457217754354-1a51pns0tn4sevpl84dlb2ok874t70h2.apps.googleusercontent.com"; my $client_secret = "vMsT98SeVK-rQrmUqwT19ASt"; my $oauth = Net::Google::Analytics::OAuth2->new( client_id => $client_id, client_secret => $client_secret, redirect_uri => 'http://localhost', ); $oauth->interactive;
実行
- URLが出てくるのでそれにアクセス
- アクセスした際のURLの末尾についているcodeの値を入力する
- 正常に取得できればAccess token,Refresh tokenが取得できるので以後それを使う
- redirect_uriはコンソール上でプロジェクトのAPIを有効にする時に設定するものと同じでないとエラーになる模様
$ perl token.pl 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: <アクセスした際のURLについているcodeパラメータの値を入力> Access token: ***** Refresh token: *****
取得してみる
準備が整ったので実際に値を取得する
下記のようにAPIにリクエストする
my $req = $ga->new_request( ids => "ga:10......", start_date => "2016-01-01", end_date => "2016-01-19", dimensions => 'ga:pagePath', metrics => "ga:pageviews", ); my $res = $ga->retrieve($req);
各項目はざっと下記のような認識でよさそう
ids
- viewID GoogleAnalyticsの管理画面上で取得する
dimensions
- 結果をグループ化する指標
metrics
- 取得する指標
filters
- 取得するデータにフィルターをかける
start_date
- 集計期間の始まり
end_date
- 集計期間の終わり
参考
Dimensions(ディメンション)とMetrics(マトリクス)
PVを取得する
- ga.pl
my $req = $ga->new_request( ids => "ga:10......", start_date => "2016-01-01", end_date => "2016-01-19", dimensions => 'ga:pagePath', metrics => "ga:pageviews", ); my $res = $ga->retrieve($req); foreach my $row ( @{ $res->rows } ) { print "pv: " . $row->[1] . "\tpath: " . $row->[0] . "\n"; }
実行します
perl ga.pl pv: 15 path: /entry/2015/07/14/014233 pv: 155 path: /entry/2015/07/22/040354 pv: 66 path: /entry/2015/07/28/031712 pv: 14 path: /entry/2015/08/04/024945 .... .... .... pv: 6 path: /entry/2015/08/12/024246 pv: 47 path: /entry/2015/08/19/023956 pv: 5 path: /entry/2015/08/25/004447 pv: 8 path: /entry/2015/09/02/003644 pv: 4 path: /entry/2015/09/08/232210
これでpath毎のPV数が出せます。path毎にシェア数も取得すればShareRateみたいなのが出せそうですね。
意味があるかどうかはおいといて...
また、ディメンジョンはカンマ区切りで複数指定可能です
my $req = $ga->new_request( ids => "ga:10......", start_date => "2016-01-01", end_date => "2016-01-19", - dimensions => 'ga:pagePath', + dimensions => 'ga:pagePath,ga:date', metrics => "ga:pageviews", ); my $res = $ga->retrieve($req); foreach my $row ( @{ $res->rows } ) { - print "pv: " . $row->[1] . "\tpath: " . $row->[0] . "\n"; + print "pv: " . $row->[2] . "\tdate:" . $row->[1] . "\tpath: " . $row->[0] . "\n"; }
結果の一行一行は配列になっていますがdimensionsで指定した順、metricsで指定した順に値が格納されるようです
perl ga.pl pv: 1 date:20160102 path: /entry/2015/07/22/040354 pv: 10 date:20160104 path: /entry/2015/07/22/040354 pv: 11 date:20160105 path: /entry/2015/07/22/040354 pv: 14 date:20160106 path: /entry/2015/07/22/040354
そもそもブログのPV自体が少ないのであれですが日別レポートも出せますねw
Analyticsのコンソールだとdimensionsは二つまで(セカンダリディメンジョン)ですが、API経由だとそれ以上ディメンジョンを指定できるのでより細かいレポートとかを独自に作れたりしそうです