GoogleAnalyticsAPIをPHPでたたくクラス
少し使ってみようと思い、GoogleAnalyticsAPIをPHPでたたくクラスを書いてみる(相変わらずのPHP4…orz)。
具体的にはHTTP_Requestを使って認証〜データ取得までしようということ。
GoogleAnalyticsAPIのドキュメントは全て英語ですが、あれこれやってみればわかる!そういうもんです。
コードはこんな感じ。
class googleAnalyticsAPI { //HTTP_Requestのオプション var $option; //ログインデータ var $auth_data; //トークン var $auth_token; //取得結果 var $result; function googleAnalyticsAPI($option, $email, $passwd, $profile){ if(!$option){ $this->option = array("timeout" => "10", "allowRedirects" => true, "maxRedirects" => 3,); }else{ $this->option = $option; } $this->auth_data['email'] = $email; $this->auth_data['passwd'] = $passwd; $this->auth_data['profile'] = $profile; } function googleLogin(){ // HTTP_Requestの初期化 $http = new HTTP_Request("https://www.google.com/accounts/ClientLogin", $this->option); // HTTPのヘッダー設定 $http->setHttpVer("1.1"); $http->setMethod(HTTP_REQUEST_METHOD_GET); $http->addQueryString("accountType", "GOOGLE"); $http->addQueryString("Email", $this->auth_data["email"]); $http->addQueryString("Passwd", $this->auth_data["passwd"]); $http->addQueryString("service", "analytics"); $http->addQueryString("source", ""); $ret = array("status" => false, "parameter" => array()); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $code = $http->getResponseCode(); if ($code == 200) { $ret["status"] = true; $ret["parameter"] = $http->getResponseBody(); preg_match('/Auth=(.*)/', $ret["parameter"], $matches); if (isset($matches[1])) { $this->auth_token = $matches[1]; } } else { $ret["parameter"] = $http->getResponseBody(); } } } function getGoogleAnalyticsXML($startDate, $endDate){ $this->googleLogin(); $url = "https://www.google.com/analytics/feeds/data"; $ret = array("status" => false, "parameter" => array()); // HTTP_Requestの初期化 $http = new HTTP_Request($url, $this->option); // HTTPのヘッダー設定 $http->setHttpVer("1.1"); $http->setMethod(HTTP_REQUEST_METHOD_GET); $http->addHeader("Authorization", "GoogleLogin auth=$this->auth_token"); $http->addQueryString("start-date", $startDate); $http->addQueryString("end-date", $endDate); $http->addQueryString("dimensions", "ga:pagePath"); $http->addQueryString("metrics", "ga:uniquePageviews,ga:pageviews"); $http->addQueryString("sort", "ga:pagePath"); $http->addQueryString("max-results", "99999"); $http->addQueryString("ids", "ga:" . $this->auth_data["profile"]); $http->addQueryString("prettyprint", "true"); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $code = $http->getResponseCode(); if ($code == 200) { $ret["status"] = true; $ret["parameter"] = $http->getResponseBody(); $this->result = $ret; } else { $ret["parameter"] = $http->getResponseBody(); $this->result = $ret; } } return $this->result; } }
googleAnalyticsAPIの引数はHTTP_Requestのオプション配列、Googleアカウントのメールアドレス、パスワード、それとGoogleAnalyticsのレポートのID。
GoogleAnalyticsのレポートのIDは、レポートを表示したときにURLに出てくるid=********の数字です(別名「プロファイル ID」というやつ)。
これで後は期日を設定すればXMLを取得できます。
$gaAPI = new googleAnalyticsAPI("", "mailaddress@gmail.com", "password", "profile-id"); $gaXML = $gaAPI->getGoogleAnalyticsXML("2009-04-01", "2009-04-07"); var_dump($gaXML);
簡単簡単。
こんな感じのXMLが取得できる。
ちなみに私の書いたクラスでは取得するデータの形式が次のようになっている。
$http->addQueryString("dimensions", "ga:pagePath"); $http->addQueryString("metrics", "ga:uniquePageviews,ga:pageviews"); $http->addQueryString("sort", "ga:pagePath");
「dimensions」は解析結果を表示するときのベースとなるものだ。
例えば、アクセス元の国別にアクセス数等取得したい場合は「ga:country」。
アクセスブラウザ別に取得したい場合は「ga:browser」など。
「ga:pagePath」はアクセスURL別のアクセス数等を取得します(「ga:pageTitle」ならページタイトル別)。
詳しくはGoogleCodeのGoogle Analytics (Labs)に書かれています。
(Dimensionsの表の所)
「metrics」は、「dimensions」が行なら列に当たるもの。
ページビュー(ga:pageviews)やユニークユーザ数(ga:visitors)、直帰数(ga:bounces)などを入れます
詳しくはGoogleCodeのGoogle Analytics (Labs)に書かれています。
(Metricsの表の所)
「sort」は、ソートする順番。
同じくDimensions・Metricsの表から値を選んで入力する。
リクエストパラメーターは他にもあり、「filters」であらかじめフィルタリングして取得することもできる。
「ga:country%3D%3DJapan」みたいにすれば、日本からのアクセスだけに絞れるわれだ(%3DはURLエンコード)。
詳しくは「Filtering Dimensions or Metrics」を見ると分かります。
本当はページごとにブラウザ別のアクセス数とか見たかったんだけど、フィルタリングとかすれば取得できるのかなぁ〜。
今度試してみよう。
嘘を書いている場合はコメントで教えてください。