さて、Google Analytics APIのクラスライブラリとしてgoogleanalytics.class.phpがあります。
まとめてデータを取得できるところが非常に便利なのですが
データ取得時に下記のようなエラーメッセージが出ることがあります。
エラーメッセージ
「Error: Bad request – Requested 11 metrics; only 10 are allowed.」
なんと、取得するときにメトリクスは10個までしか受け付けてもらえません。
たくさんコンバージョン(目的)の設定をしている場合は注意が必要です。
エラーが起こる記述
require_once 'googleanalytics.class.php'; $ga_id = 'AAA'; //Google Analytics ID $ga_pass = 'BBB'; //Google Analytics パスワード $ga_profile_id = 'ga:XXXXXXXX'; //プロファイルID $metrics = ''; $metrics .= 'ga:visitors,'; $metrics .= 'ga:exits,'; $metrics .= 'ga:goal1Completions,'; $metrics .= 'ga:goal2Completions,'; $metrics .= 'ga:goal3Completions,'; $metrics .= 'ga:goal4Completions,'; $metrics .= 'ga:goal5Completions,'; $metrics .= 'ga:goal6Completions,'; $metrics .= 'ga:goal7Completions,'; $metrics .= 'ga:goal8Completions,'; $metrics .= 'ga:goalCompletionsAll'; try{ $ga = new GoogleAnalytics($ga_id , $ga_pass); $ga->setProfile($ga_profile_id); $ga->setDateRange('2012-06-01' , '2012-06-30'); $report = $ga->getReport( array( 'dimensions' => urlencode('ga:date'), 'metrics' => urlencode($metrics), 'sort' => 'ga:date' ) ); print_r($report); } catch (Exception $e) { print 'Error: ' . $e->getMessage(); }
とは言え、必要なデータはやはり取らないといけません。
こうなったら2回getReportを投げて戻り値の配列をマージしてみます。
require_once 'googleanalytics.class.php'; $$ga_id = '<Google Analytics ID>'; $ga_pass = '<Google Analytics パスワード>'; $ga_profile_id = 'ga:XXXXXXXX'; //プロファイルID $metrics = ''; $metrics .= 'ga:visitors,'; $metrics .= 'ga:exits,'; $metrics .= 'ga:goal1Completions,'; $metrics .= 'ga:goal2Completions,'; $metrics .= 'ga:goal3Completions,'; $metrics .= 'ga:goal4Completions,'; $metrics .= 'ga:goal5Completions,'; $metrics .= 'ga:goal6Completions,'; $metrics .= 'ga:goal7Completions,'; $metrics .= 'ga:goal8Completions,'; $metrics .= 'ga:goalCompletionsAll'; try{ $ga = new GoogleAnalytics($ga_id , $ga_pass); $ga->setProfile($ga_profile_id); $ga->setDateRange('2012-06-01' , '2012-06-30'); $metrics_arr = explode(',', $metrics); //メトリクスを配列化 $step_total = ceil(count($metrics_arr) / 10); for($step = 0; $step < $step_total; $step++){ //10個ずつmetricsを抽出 $report_metrics = implode(',', array_slice($metrics_arr, $step * 10, 10)); $report_wrk = $ga->getReport( array( 'dimensions' => urlencode('ga:date'), 'metrics' => urlencode($report_metrics), 'sort' => 'ga:date' ) ); //初回は代入のみ if($step == 0){ $report = $report_wrk; continue; } //2回目移行は配列をマージ foreach ($report_wrk as $wrk_idx => $ga_ret) { $report[$wrk_idx] = array_merge($report[$wrk_idx], $report_wrk[$wrk_idx]); } } print_r($report); } catch (Exception $e) { print 'Error: ' . $e->getMessage(); }
なんだか、カッコ悪い感じもしますが、GoogleAnalyticsのオブジェクト化を
1回だけにしておくのがポイントです。
このオブジェクトを作成するだけで僕の環境では2~3秒かかってました;
掲載している内容についてはご自身の責任で参考にされてください。