GoogleAnalytics APIが仕様変更でデータが取得できない場合の対処法

なんと、1ヶ月ぶりにGoogleAnalytics APIでXMLのレポートデータを取得しようとしたら仕様が変わってました…Googleってこういうベータ版的なサービスは容赦なく変更するから困りますよね~…

と愚痴っていてもしょうがないので、PHPでこのGoogleAnalytics APIのレポートデータを簡単に扱えるGAPIでもエラーが出てましたので、解決法をば。

きっかけはエラーの内容

気づいたのはGAPIを利用しているPHPでこんなエラーが表示されてしまったこと。

No valid root parameter or aggregate metric called "TotalResults" ...(以下略)

「TotalResultsの値がデータのroot部分に無いよ」と言われる。

そして悲しいことに、GAPIはバージョンが2009年の1.3ままで放置されてしまっていた…しかたない。自力でやるか。

とりあえずgapi.phpの呼び出し部分を見ると、__callメソッド内で「$this->report_root_parameters」と「$this->report_aggreate_metrics」のデータの中を「totalresults」キーで照合しているのですが、見つからないためにエラーがスローされていました。

ということは、うまくデータが取れていない。
GoogleAnalytics APIでデータのキーが変わったのかな?と思って仕様を調べてみても「totalResults」はちゃんと仕様に存在しています。

XMLデータはちゃんと取得できていた

Googleから返されているXMLの生データを確認してみようと思って、gapi.phpのreportObjectMapperメソッド内でダウンロードされたXMLデータをファイルに落としてエディタで見てみると、こんな感じでちゃんと入ってたんですよ。

gapi-error-fix.gif

OpenSearchのバージョンが変わった

このデータを抽出するgapi.phpのコードがここ。

$open_search_results = $xml->children('http://a9.com/-/spec/opensearchrss/1.0/');

もしかして、名前空間の仕様が変わってるんじゃないか?と思ってもう一回XMLデータを見てみたら…

<feed ... xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">

ああ、やっぱり仕様が変わってる…OpenSearchの仕様が1.0のものから1.1のものに変更されていたようです。

ということで、gapi.php側も以下のように変更。

$open_search_results = $xml->children('http://a9.com/-/spec/opensearch/1.1/');

これで無事に読み込まれるようになりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2012-08-02