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」を見ると分かります。
本当はページごとにブラウザ別のアクセス数とか見たかったんだけど、フィルタリングとかすれば取得できるのかなぁ〜。
今度試してみよう。
嘘を書いている場合はコメントで教えてください。